#<t5%%E:++    %CTALKvONeG2 TaTC :TC cov_standard COVERAGE.VCX$TCoTemp.BaseClassbC % %T T T  TC  %>T "Your coverage analysis is saved asC  .%C T  C C 'Some source files could not be located;C 'their names are saved in a second tableC ( ).%C }TT  C C (Your coverage stack analysis is saved asC  . C Coverage Profilerx C CO cov_standard %G2 %C ^+| ShellExecuteASHELL32!Copen %C F Q  :z,C(%C F Q  :z,C( BUTCFILE TLUNATTENDEDTCADDINOTEMPCALIASLSUCCESSLSETTALKBACKONCAPPFILECLIBSCUNATTENDEDMESSAGE CSAVEDTARGETCSAVEDSKIPPEDFILESCSAVEDSTACKXML FINDAPPFILECSAVEDTARGETDBFCSAVEDSKIPFILESRELEASESHOW SHELLEXECUTEASHELL32 T(TCC]f,%CCRAPPEXEVFDDLL T!% PROCEDURETC \TCC \ BU CFILENAMECSYS16ILEVEL FindAppFileaAA ADAAAAAaAAaAaA3AAAA!A16 y0mPLATFORMCUNIQUEIDC TIMESTAMPN CLASSMCLASSLOCM!BASECLASSM%OBJNAMEM)PARENTM-PROPERTIESM1PROTECTEDM5METHODSM9OBJCODEM=OLEMAOLE2MERESERVED1MIRESERVED2MMRESERVED3MQRESERVED4MURESERVED5MYRESERVED6M]RESERVED7MaRESERVED8MeUSERMi COMMENT Class  WINDOWS _RKB0NOW1Y 582513910  COMMENT RESERVED  WINDOWS _RKC0TLT43 5842767651/( COMMENT RESERVED  WINDOWS _RKC0TK86D 584276775 COMMENT RESERVED  WINDOWS _RKA168O8P 584276786 COMMENT RESERVED  WINDOWS _RKA15Q5XG 584276815 COMMENT RESERVED  WINDOWS _RKC0TP7PY 584276856   COMMENT RESERVED  WINDOWS _RKA169PDA 584276868 COMMENT RESERVED WINDOWS _RKA16ADRP 584276875 COMMENT RESERVED WINDOWS _RKD0PKSSY 584276882 WINDOWS _RKD0PMCPR 584276882 COMMENT RESERVED WINDOWS _RKA16FYVN 584276913 COMMENT RESERVED WINDOWS _RKA1679VC 584276922 COMMENT RESERVED WINDOWS _RKA16ESVS 584276949>O?NI<=@:; COMMENT RESERVED 9 WINDOWS _RKA16ED68 584276960&8'61$%("# COMMENT RESERVED ! WINDOWS _RKC0T0X5H 584276968  COMMENT RESERVED WINDOWS _RKG0YPXRA 611480161[  \t_YZTXS WINDOWS _RKA169PDA 611480161 WINDOWS RESERVED 611480161 WINDOWS _RKT0WW9CV 611480161ihf[ WINDOWS _RKA169PDA 611480161a`_^>[5W WINDOWS _RKG0YZK30 584276737#TQQ WINDOWS _RKG0YZK42 609112424   HK WINDOWS _RKA16D662 584276737 E WINDOWS _RKI0JF4K7 611480161yxwsr@ WINDOWS _RKI0JF4LM 611480161qp_^]' COMMENT RESERVED @?P WINDOWS _RKI0IS45F 611482027nm7:ab WINDOWS _RKI0J3OT4 5831410389832'$ WINDOWS _RKI0J3OTN 583141038#    WINDOWS _RKI0J3OU6 583141038 WINDOWS _RKI0J3OV7 583141038 WINDOWS _RKI0J3OVQ 583141038~{ WINDOWS _RKI0J3OW9 583141038zytsro WINDOWS _RKI0J3OWS 583141038ihgfeb WINDOWS _RKI0J3OXC 583141038a*)('$ WINDOWS _RKI0J3OYE 583141038#" WINDOWS _RKI0J3OXU 611480044 COMMENT RESERVED ` WINDOWS _RKA141JIM 612110498]b`nd-[\aYZW COMMENT RESERVED ('T WINDOWS _RKC0TULUO 612115882vuw6 COMMENT RESERVED  WINDOWS _RKV02Q18N 626492744"!4  DEC COMMENT RESERVED BA> WINDOWS _RTI1D0DF0 626494092}~{|z[ COMMENT RESERVED X WINDOWS _RKV01GTSG 630738370W C WINDOWS _RKV01O98J 582487188 COMMENT RESERVED KAH WINDOWS _RKI05X4G2 643481202& k)$%? WINDOWS _RKI062JGR 612080728>K COMMENT RESERVED  WINDOWS _RZ7124Y6S 643498817RS 12 / WINDOWS _RZ7124Y73 6434988172yG#L WINDOWS _RZ7124Y78 626350642 !"} WINDOWS _RZ7124Y7N 643498817OPv WINDOWS _RZ7124Y7T 643498817<Ox WINDOWS _RZ7124Y7W 643498817w1! WINDOWS _RZ7124Y7Z 643498817o WINDOWS _RZ7124Y85 643498817m WINDOWS _RZ7124Y8A 643498817N} WINDOWS _RZ7124Y8F 643498817j7w WINDOWS _RZ7124Y8K 643498817Aqc WINDOWS _RZ7124Y8P 6434988177 WINDOWS _RZ7145E8Y 626301747yc_^e COMMENT RESERVED  WINDOWS _RKD0WHP62 681201370r v WINDOWS _RKA16D662 681201370K;B WINDOWS _RKB0NOW1Y 681201370P= WINDOWS _RKV0HM211 681201370N:Rz WINDOWS _RKV0HM23P 681201370mlN] WINDOWS _RKV0HM24V 681201370nLM WINDOWS _RKV0HM26T 681201370|a0$ WINDOWS _RKV0HM298 681201370F WINDOWS _RKV0HM2B6 681201370UVWY WINDOWS _RKV0HM2CB 626350760z WINDOWS _RKB0NOW1Y 681201370  + WINDOWS _RKV0HM2GR 626350760xQ WINDOWS _RZ714HPSK 6812013700  WINDOWS _RZ714HPT0 681201370$ WINDOWS _RKD12GENE 626359885ut  WINDOWS _RKD12GEO5 681201370lkjZo WINDOWS _RKD12GEOK 588096153bb  COMMENT RESERVED Dtb WINDOWS _RKA16D662 687686437gh/HfFG COMMENT RESERVED 0 WINDOWS _RKV021YA2 688413434_ ~ COMMENT RESERVED  WINDOWS _RKC10MKO8 688416241>sCXY COMMENT RESERVED L WINDOWS _RKB0N1P9K 689141446G :c.xyFvw COMMENT RESERVED ut WINDOWS _RKI06PTSJ 690717938k3lSijWXV WINDOWS _RKA16ESVS 689593651 j$ WINDOWS _RKU0OQYO9 689593651* WINDOWS _RKA16ESVS 690717938  WINDOWS _06M13ENKL 690717938  WINDOWS _RKB0NOW1Y 690717938u WINDOWS _RKA169PDA 690717938tsKBAp WINDOWS _RKA169PDA 689593651.HA WINDOWS _RKB0NOW1Y 690717938 WINDOWS _RKB0NOW1Y 690717938 WINDOWS _RKI1BJPDQ 690717938 WINDOWS _RKA169PDA 690717938{?v WINDOWS _06M14LQMY 689594055=43."+ WINDOWS _RKB0NOW1Y 689593651! WINDOWS _RKI1BJPF8 6895936513 WINDOWS _RKI1BJPFP 690717938 WINDOWS _RKA169PDA 690717938wt WINDOWS _06M14LQNI 690717938sr`_W\ WINDOWS _RKA169PDA 689593651VUQPJM WINDOWS _RKI1BJPHM 689593651IH"!C WINDOWS _RKB0NOW1Y 690717938 WINDOWS _RKA169PDA 690717938 WINDOWS _RKI1CJHHU 690717938 WINDOWS _RKT0VSUM8 690717938 WINDOWS _RKT0VSUN2 690717938 WINDOWS _06M13ENKM 690717938na`KJ WINDOWS _RKB0NOW1Y 690717938IHGFE WINDOWS _RKT0VSUNY 690717938X<9 WINDOWS _RKU0OQYPQ 690717938876541 WINDOWS RESERVED 690717938!srqpm COMMENT RESERVED USP WINDOWS _RKD0XE6V6 714966892B/`  _l WINDOWS _RKD0YU5E1 714966892@z0 COMMENT RESERVED k4 WINDOWS _RKI0UFURT 754537998UcbV\3z/0. WINDOWS _RKI0VVV94 754537998-,+*)' WINDOWS _RKI0VVV9L 754537998&%$#"Y WINDOWS _RKI0VVVAF 754537998) WINDOWS _RKI0VVVBK 754537998    L WINDOWS _RKI0VVVCD 754537998 WINDOWS _RKT0V2HLQ 754537998XiW COMMENT RESERVED .d@VERSION = 3.00 OIAU(8~f \8S7 scov_toolbarѱ mO^rla*kBa^ +6|2PixelsqL8_oNW;z~!> `)qt%6MW ;3ucoverage superclass7OtPlaͱK5O>kz{ZzkClass1toolbar scov_toolbarlerror  W%@ .UT...UTHISCAPTION CUTHISFORMGETADDINDTa$C:UNERRORCMETHODNLINETHISLERRORTHISFORMERRORNAMEInit,ClickUError}1133A2,Hc )$PROCEDURE Init RETURN NOT THIS.lError ENDPROC PROCEDURE Error LPARAMETERS nError, cMethod, nLine THIS.lError = .T. IF TYPE("THISFORMSET.BaseClass") = "C" THISFORMSET.Error(nError,THIS.Name+":"+cMethod,nLine) ELSE Error nError ENDIF ENDPROC -Caption = "Toolbar1" Name = "scov_toolbar" toolbar)MS Sans Serif, 0, 8, 5, 13, 11, 11, 2, 0  scov_textboxPixelscoverage superclassClass1textbox scov_textboxlerror , S%UDTa$C:UNERRORCMETHODNLINETHISLERRORTHISFORMERRORNAMEError,1A2)JMS Sans Serif, 0, 8, 5, 13, 11, 11, 2, 0 Arial, 1, 9, 6, 15, 12, 32, 3, 0 scov_container)PROCEDURE Init RETURN NOT THIS.lError ENDPROC PROCEDURE Error LPARAMETERS nError, cMethod, nLine THIS.lError = .T. IF TYPE("THISFORMSET.BaseClass") = "C" THISFORMSET.Error(nError,THIS.Name+":"+cMethod,nLine) ELSE Error nError ENDIF ENDPROC 5ҟ0z([FontName = "MS Sans Serif" FontSize = 8 Height = 23 Width = 100 Name = "scov_textbox" hmԱV͌\3EsڛJ8textbox?<:m*Ĩ4 H9QA n tt( mƐH$ & scov_shapeW昫zQ[K"$-gLmB,Z14CwgBPixelsl/RԏĮZglb'#YXÓ\Ucoverage superclassFR=:M wTٵz1 c!SyihgClass.ǽ9A;r6>V7|TVG>},ѣ 1A1MqDw[杗6Z%=Kbe+7f+MGP5shapeG 6αi0sD/bxhַnwgg8m).˝Uj scov_shapelerror  %U+ CT CUTHISFORMRESTOREENGINEFONTSOCOVERAGEENGINERELEASEClick,12s)Pixelscoverage superclassClass#PROCEDURE Error LPARAMETERS nError, cMethod, nLine THIS.lError = .T. IF TYPE("THISFORMSET.BaseClass") = "C" THISFORMSET.Error(nError,THIS.Name+":"+cMethod,nLine) ELSE Error nError ENDIF ENDPROC PROCEDURE Init RETURN NOT THIS.lError ENDPROC .Height = 68 Width = 68 Name = "scov_shape" shapeiWc- f,i6b0^zqEZϱEXa! coverage.hι+ cov_char.hϸ+ cov_locs.hй+ cov_dlgs.hѹ+ cov_spec.hҹ+ cov_regs.hӹ+ cov_tune.hԹ+OMS Sans Serif, 0, 8, 5, 13, 11, 11, 2, 0 Courier New, 0, 8, 7, 14, 11, 7, 3, 0 cov_optionsdialog coverage.hPixels'options dialog for coverage standard UI %A /U.CT CUTHISFORMSETADDINOCOVERAGEENGINERELEASEDTa$C:UNERRORCMETHODNLINETHISLERRORTHISFORMERRORNAMEClick,Error13A2h)cov_statisticsPixels0container holding statistics on a file or object %3SOUUProgrammaticChange,14")1 containerscov_containerClass30cov_modaldialogcov_optionsdialogAutoSize = .T. FontBold = .F. BackStyle = 1 Caption = "Start mode" Height = 15 Left = 200 Top = 101 Width = 53 TabIndex = 11 ZOrderSet = 23 Name = "lblStartMode" cov_optionsdialog. lblStartModelabel coverage.vcx)MS Sans Serif, 0, 8, 5, 13, 11, 11, 2, 0 scov_optiongroupPixelscoverage superclassClass1lLeft = 142 Top = 0 TabIndex = 6 Name = "opgCoverageProfileMode" Option1.Picture = ("coverage.bmp") Option1.Caption = ("") Option1.Left = 0 Option1.SpecialEffect = 2 Option1.Top = 0 Option1.Name = "Option1" Option2.Picture = ("profile.bmp") Option2.Caption = ("") Option2.Left = 23 Option2.SpecialEffect = 2 Option2.Top = 0 Option2.Name = "Option2" )MS Sans Serif, 0, 8, 5, 13, 11, 11, 2, 0 ذif(v scov_listbox#*sIlDs7%هyːv7aRSqPixelsH镃bN7o2'%WmK>O vȾ|coverage superclassClass1listbox scov_listboxlerror Z AA%U CU THISFORMSETSTANDARDRIGHTCLICK$!J(UTHISFORM BACKCOLORTHIS BORDERCOLOR FILLCOLOR RightClick,Inita133;V)AClasscov_addindialog$PROCEDURE Error LPARAMETERS nError, cMethod, nLine THIS.lError = .T. IF TYPE("THISFORMSET.BaseClass") = "C" THISFORMSET.Error(nError,THIS.Name+":"+cMethod,nLine) ELSE Error nError ENDIF ENDPROC PROCEDURE Init RETURN NOT THIS.lError ENDPROC \FontName = "MS Sans Serif" FontSize = 8 Height = 170 Width = 100 Name = "scov_listbox" listbox scov_labelPixelscoverage superclassClass1label scov_labellerror  f%Pd^UT-UTHISVISIBLEInit,12))11scov_container coverage.hPixels$PROCEDURE Init RETURN NOT THIS.lError ENDPROC PROCEDURE Error LPARAMETERS nError, cMethod, nLine THIS.lError = .T. IF TYPE("THISFORMSET.BaseClass") = "C" THISFORMSET.Error(nError,THIS.Name+":"+cMethod,nLine) ELSE Error nError ENDIF ENDPROC {FontName = "MS Sans Serif" FontSize = 8 BackStyle = 0 Caption = "Label1" Height = 17 Width = 40 Name = "scov_label" label coverage.hٹ+ cov_char.h&ڸ+ cov_locs.h.۹+ cov_dlgs.h6ܹ+ cov_spec.h>ݹ+ cov_regs.hF޹+ cov_tune.hN߹+ scov_formset coverage.hcoverage superclassClass2formset scov_formsetBHeight = 22 Left = 0 Top = 0 Width = 33 Name = "cov_toolbar"  scov_formset. cov_toolbarPixelstoolbar coverage.vcx scov_toolbarlerror L 339%U C B U THISFORMSETSHOWFINDDIALOGTHISLERROR TFind BCUTHIS TOOLTIPTEXTClick,Initx13A2Rm)3PROCEDURE Init RETURN NOT THIS.lError ENDPROC PROCEDURE Error LPARAMETERS nError, cMethod, nLine COV_DEBUG_MESSAGE COV_DEBUG_ACTION THIS.lError = .T. ENDPROC Name = "scov_formset" eyValues[m.nKeyEntry,2] = REG_UNKformsetou will need to use ASC() to check values here. )MS Sans Serif, 0, 8, 5, 13, 11, 11, 2, 0 aKeyValues scov_formm.lpbData,m.lpcbData-1) CASE lpdwType = Pixels CASE lpdwType = REG_SZ aKeyValues[m.nKecoverage superclasseft(m.lpszValue,m.lpcchValue) Class1form scov_formlerror cov_statisticsFontBold = .T. BackStyle = 1 Caption = "File or Class Name" Height = 15 Left = 5 Top = 0 Width = 233 ZOrderSet = 9 Name = "lblName" cov_statistics.lblNamelabel coverage.vcx$PROCEDURE Init RETURN NOT THIS.lError ENDPROC PROCEDURE Error LPARAMETERS nError, cMethod, nLine THIS.lError = .T. IF TYPE("THISFORMSET.BaseClass") = "C" THISFORMSET.Error(nError,THIS.Name+":"+cMethod,nLine) ELSE Error nError ENDIF ENDPROC nDoCreate = .T. Caption = "Coverage Base Form" FontName = "MS Sans Serif" FontSize = 8 Name = "scov_form" IF m.nEform EXIT ENDCASE cNewKey = ALLTRIM(m.)MS Sans Serif, 0, 8, 5, 13, 11, 11, 2, 0 CASE m.nErrCo scov_editboxnCurrentKey,m.nKeyEntry,@cNewKey,@nKeySize,0Pixelsf) cRetTime=SPACE(100) m.nErrCode coverage superclassey) cbuf=SPACE(100) nbuClass nKeySize = 0 cNewKey = SPACE(100) 1etTime nKeyEntry = 0 DIMENSION aKeyNames[1] editboxmes LOCAL nKeyEntry,cNewKey,cNewSize,cbuf,n scov_editbox &&close key RETURN m.nErrNum LPAlerror  scov_labelMHeight = 0 Left = 27 Top = 53 Width = 52 ZOrderSet = 10 Name = "Line2" cov_statistics.Line2 coverage.hι+ cov_char.hϸ+ cov_locs.hй+ cov_dlgs.hѹ+ cov_spec.hҹ+ cov_regs.hӹ+ cov_tune.hԹ+$PROCEDURE Error LPARAMETERS nError, cMethod, nLine THIS.lError = .T. IF TYPE("THISFORMSET.BaseClass") = "C" THISFORMSET.Error(nError,THIS.Name+":"+cMethod,nLine) ELSE Error nError ENDIF ENDPROC PROCEDURE Init RETURN NOT THIS.lError ENDPROC [FontName = "MS Sans Serif" FontSize = 8 Height = 53 Width = 100 Name = "scov_editbox" editbox cOptName,cOptVal,cKeyPath,nUserKey LOCAL iPo scov_custom"ResWidth",@cValue,; * "Software\MicPixels * This routine gets a registry key setting * coverage superclassKey() &&close key RETURN m.nClassIS.SetKeyValue(m.cOptName,m.cOptVal) * Close 1 RETURN m.nErrNum ENDIF * Set Key value custom scov_customlerror  }%-U CU THISFORMSETSTANDARDRIGHTCLICK9C B U OSOURCENXCOORDNYCOORDTHISFORMRESPONDTOSPLITTER SHPSPLITTERHEIGHTTHISLERROR RightClick,DragDropa133;Z)5modal dialog to run add ins from coverage standard UI!PROCEDURE Init RETURN NOT THIS.lError ENDPROC PROCEDURE Error LPARAMETERS nError, cMethod, nLine THIS.lError = .T. IF TYPE("THISFORMSET.BaseClass") = "C" THISFORMSET.Error(nError,THIS.Name+":"+cMethod,nLine) ELSE Error nError ENDIF ENDPROC Name = "scov_custom" RETURN m.nErrNum ENDIF custom"L" lEnumKeys = .F. ENDIF * Open lerror *synchsizes Designed to allow tools added into the Coverage standard UI to maintain size and position consistency with original member set. 4Width = 200 Height = 200 Name = "scov_container"  container optiongroupscov_optiongroup scov_labellinelineAutoSize = .T. Alignment = 0 Caption = "% Coverage" Left = 87 Top = 73 Width = 59 ZOrderSet = 8 Name = "lblPercentCaption" cov_statistics.lblPercentCaptionlabel coverage.vcx f%Pd^UT-UTHISVISIBLEInit,12))Class7AutoSize = .T. FontBold = .F. BackStyle = 1 Caption = "Environment" Height = 15 Left = 200 Top = 168 Width = 61 TabIndex = 13 ZOrderSet = 23 Name = "lblEnvironment" cov_optionsdialog.lblEnvironmentlabel coverage.vcx scov_labelAutoSize = .T. FontBold = .F. BackStyle = 1 Caption = "Options" Height = 15 Left = 16 Top = 10 Width = 38 TabIndex = 1 ZOrderSet = 22 Name = "lblOptions" cov_optionsdialog. coverage.vcx coverage.hٹ+ cov_char.h&ڸ+ cov_locs.h.۹+ cov_dlgs.h6ܹ+ cov_spec.h>ݹ+ cov_regs.hF޹+ cov_tune.hN߹+)MS Sans Serif, 0, 8, 5, 13, 11, 11, 2, 0  cov_frame coverage.hPixels8top form for coverage standard UI in coverage frame modelerror  optiongroup coverage.hٹ+ cov_char.h&ڸ+ cov_locs.h.۹+ cov_dlgs.h6ܹ+ cov_spec.h>ݹ+ cov_regs.hF޹+ cov_tune.hN߹+llsSMTP Email Addressl_slater_nicholls@msn.ccov_zoomdialogConnection TypeConnect2 x%5 U CUTHISFORM CHECKOKTORUN CUTHISFORM CHECKOKTORUNDTa$C:UNERRORCMETHODNLINETHISLERRORTHISFORMERRORNAME CUTHISFORM CHECKOKTORUNValid,ProgrammaticChangeXErrorInteractiveChange 134A330Y} :^)cov_modaldialogcov_addindialogcov_addindialog. lblOptions f%Pd^UT-UTHISVISIBLEInit,13+) f%Pd^UT-UTHISVISIBLEInit,131) scov_labelAutoSize = .T. Alignment = 0 Caption = "Missed" Height = 15 Left = 87 Top = 38 Width = 35 BackColor = 0,0,0 ZOrderSet = 7 Name = "lblNotCoveredCaption" cov_statistics.lblNotCoveredCaptionlabel coverage.vcx scov_label opgStartMode cov_engine coverage.h scov_checkbox3ƒtAt2t$ttu͍Ascov_commandbuttonAutoSize = .F. Alignment = 1 Caption = "0" Height = 17 Left = 31 Top = 73 Width = 48 ZOrderSet = 6 Name = "lblPercent" cov_statistics. lblPercentlabel olecontrol B UTHISCAPTION coverage.vcxUN'%C C  :Height = 43 Width = 151 Name = "scov_commonfiledialog" { UNERRORCMETHODNLINETHIS coverage.vcx scov_label|AutoSize = .T. Alignment = 0 Caption = "Total" Left = 87 Top = 58 Width = 26 ZOrderSet = 5 Name = "lblTotalCaption" cov_statistics.lblTotalCaptionlabel coverage.vcx scov_labelcov_statistics.vAutoSize = .F. BackStyle = 0 BorderStyle = 0 Value = 1 Height = 22 SpecialEffect = 1 WIDTH = 46 Name = "cov_picturetoggle" Option1.FontName = "MS Sans Serif" Option1.FontSize = 8 Option1.Caption = ("") Option1.Value = 1 Option1.Height = 22 Option1.Left = 0 Option1.SpecialEffect = 1 Option1.Style = 1 Option1.Top = 0 Option1.WIDTH = 23 Option1.Name = "Option1" Option2.FontName = "MS Sans Serif" Option2.FontSize = 8 Option2.Caption = ("") Option2.Value = 0 Option2.Height = 22 Option2.Left = 23 Option2.SpecialEffect = 1 Option2.Style = 1 Option2.Top = 0 Option2.WIDTH = 23 Option2.Name = "Option2" AutoSize = .T. Alignment = 0 Caption = "Hit" Height = 15 Left = 87 Top = 23 Width = 15 ZOrderSet = 4 Name = "lblCoveredCaption" lblCoveredCaptionlabel,OLEObject = C:\WINDOWS\SYSTEM\COMDLG32.OCX lforcesearch Forces .InitDir to "" when the dialog shows up rather than allowing the calling method to guess at it based on current surroundings.  cov_dlgs.h +scov_commondialog cov_dlgs.hPixels#T& CCZU' OBASELAMS CommDlg (<-OLEControl)!#T&ClassCFontName%&CFontNam1T !T"T# olecontrolTTscov_commondialogTTTlerror TTT(OLEObject = C:\WIN\SYSTEM\COMDLG32.OCX T  ࡱ> Root Entry|- ?|@OleObjectData\AccessObjSiteData&\ChangedProps<+/I!C4OO< \$828C4C820-401A-101B-A3C9-08002B2F49FBAlabel coverage.vcx scov_labelAutoSize = .T. FontBold = .F. BackStyle = 1 Caption = "Fonts" Height = 15 Left = 16 Top = 235 Width = 28 TabIndex = 15 ZOrderSet = 21 Name = "lblFonts"  coverage.vcx scov_labelcov_statistics.lblTotalPROCEDURE Error LPARAMETERS nError, cMethod, nLine THIS.lError = .T. IF TYPE("THISFORMSET.BaseClass") = "C" THISFORMSET.Error(nError,THIS.Name+":"+cMethod,nLine) ELSE Error nError ENDIF ENDPROC PROCEDURE Init RETURN (NOT THIS.lError) ENDPROC PROCEDURE SHOWOPEN *** OLE Control Method *** ENDPROC PROCEDURE SHOWSAVE *** OLE Control Method *** ENDPROC PROCEDURE ShowHelp *** OLE Control Method *** ENDPROC 7Height = 100 Width = 100 Name = "scov_commondialog"  olecontrol)MS Sans Serif, 0, 8, 5, 13, 11, 11, 2, 0 scov_commandbuttonPixelscoverage superclassClass1 commandbuttonscov_commandbuttonlerror  cov_maindialog_standard.cntTools.Class1 scov_formAutoSize = .F. Alignment = 1 Caption = "0" Height = 17 Left = 31 Top = 58 Width = 48 BackColor = 0,0,0 ZOrderSet = 3 Name = "lblTotal" label coverage.vcxPROCEDURE Init IF EMPTY(THIS.Picture) AND ; (NOT EMPTY(THIS.ToolTipText) ) THIS.Caption = THIS.ToolTipText ELSE THIS.Caption = "" ENDIF RETURN NOT THIS.lError ENDPROC PROCEDURE Error LPARAMETERS nError, cMethod, nLine THIS.lError = .T. IF TYPE("THISFORMSET.BaseClass") = "C" THISFORMSET.Error(nError,THIS.Name+":"+cMethod,nLine) ELSE Error nError ENDIF ENDPROC AutoSize = .T. Height = 23 Width = 148 FontName = "MS Sans Serif" FontSize = 8 WordWrap = .F. Caption = "Coverage Command Button" Style = 0 Name = "scov_commandbutton"  commandbutton!Arial, 0, 9, 5, 15, 12, 13, 3, 0  scov_comboboxPixelscoverage superclassClass*MS Sans Serif, 0, 8, 5, 13, 11, 11, 2, 0 }<.N<0c1combobox scov_comboboxlerror  scov_labelAutoSize = .F. Alignment = 1 Caption = "0" Height = 17 Left = 31 Top = 23 Width = 48 ZOrderSet = 2 Name = "lblCovered" cov_statistics. lblCoveredlabel coverage.vcx!PROCEDURE Error LPARAMETERS nError, cMethod, nLine THIS.lError = .T. IF TYPE("THISFORMSET.BaseClass") = "C" THISFORMSET.Error(nError,THIS.Name+":"+cMethod,nLine) ELSE Error nError ENDIF ENDPROC PROCEDURE Init RETURN NOT THIS.lError ENDPROC ocs.Width THIS.Adjus2Height = 24 Width = 100 Name = "scov_combobox" nLine)comboboxMinWidth) THIS.MinHeight = MAX(nHeight,THIS.Min)MS Sans Serif, 0, 8, 5, 13, 11, 11, 2, 0 ".Top") + ;  scov_checkboxme+".Width") + ; EVAL("THIS."+Pixelsidth, nHeight IF DODEFAULT(cName,cClass) nWidcoverage superclassDURE AddObject LPARAMETERS cName, cCClassLLTR(STR(.Width - THIS.iLeftListColWidth)) ENDWITH1umnWidths = ; ALLTR(STR(THIS.iLeftListColWidth))+checkboxumnwidths WITH THIS.lstAvailableObjectsAndProcs scov_checkboxlerror  cov_frameocoverageengine form coverage.vcx scov_labelAutoSize = .F. Alignment = 1 Caption = "0" Height = 17 Left = 31 Top = 38 Width = 48 ZOrderSet = 1 Name = "lblNotCovered" cov_statistics.PROCEDURE Init IF EMPTY(THIS.Caption+THIS.Picture) AND ; (NOT EMPTY(THIS.ToolTipText) ) THIS.Caption = THIS.ToolTipText ENDIF RETURN NOT THIS.lError ENDPROC PROCEDURE Error LPARAMETERS nError, cMethod, nLine THIS.lError = .T. IF TYPE("THISFORMSET.BaseClass") = "C" THISFORMSET.Error(nError,THIS.Name+":"+cMethod,nLine) ELSE Error nError ENDIF ENDPROC oHeight = 17 Width = 60 FontName = "MS Sans Serif" FontSize = 8 Caption = "Check1" Name = "scov_checkbox" ght ENDcheckboxHIS.cntTools.Height TO ; THIS.lstAvailabl lblNotCoveredlabelHeight = 454 Width = 633 ShowWindow = 2 DoCreate = .T. AutoCenter = .T. Caption = "Coverage Frame" Icon = ("coverage.ico") KeyPreview = .T. ColorSource = 5 ocoverageengine = .NULL. Name = "cov_frame"  coverage.vcx scov_label*setfileorclassnamecaption Sets lblName caption from a passed string, evaluating width. If string is too long for lblName's width, truncates value on left side with ".." before assigning the value to the label caption. Shows as much as possible of the original value. )MS Sans Serif, 0, 8, 7, 16, 13, 14, 3, 0 stry}scov_statisticsdialogrߒmarkonetargetrecordĖOMS Sans Serif, 0, 8, 5, 13, 11, 11, 2, 0 Courier New, 0, 9, 7, 15, 12, 8, 3, 0 POP3 Portn Outloo coverage.h00001) 00000002 Acov_maindialog_standardcov_optionsdialog.lblFontslabel coverage.vcx scov_labelcov_optionsdialog.lblStack cmdStatistics cov_maindialog_standard.cntTools.ݹ+ cov_regs.hF޹+ cov_tune.hN߹+UnloadmInitLoadErrorɫ coverage.h clearstatus markalltargetrecoPixels lockscreensgetregisteredaddins scov_shape coverage.vcxshape*statistics dialog for coverage standard UIsa setClass10cov_modaldialogcov_statisticsdialogcov_statisticsdialog.ursorsetupworkfilescntClassesCoveredileislogfillfiletypearray containerogfilesuspendcoverage resumelabel coverage.vcx coverage.hι+ cov_char.hϸ+ cov_locs.hй+ cov_dlgs.hѹ+ cov_spec.hҹ+ cov_regs.hӹ+ cov_tune.hԹ+ ;%DYSU <UTHISFORMClick,1q1!)lblTitle chkMatchCaseCDDE3804-2064-11CF-867F-00AA005FF34A}cov_modaldialog424-0000-0000-C000-000000000046}ci*c coverage.vcx scov_shape scov_labelcheckbox{0002E176-0000-0000-C000-000000000046} coverage.vcx setuioptionspassedproperparcov_statisticscov_statisticsdialog.cntLinesCoveredOMS Sans Serif, 0, 8, 5, 13, 11, 11, 2, 0 Courier New, 0, 8, 7, 14, 11, 7, 3, 0  coverage.h container coverage.vcxcov_statistics2 k+%p6UTC{T%  c Taw T-U TCFILECFILETHISOCOVERAGEENGINECADDINLUSINGREGISTRYCHKREGISTERADDINSVALUELREGISTERADDINolTCPlease specify an Add-In to run All Files (*.*)|*.*GETFILEUTHIS CBOFILETORUN DISPLAYVALUEOCOVERAGEENGINEGETRESOURCELOCATION TC UTHISCMDOKENABLED CBOFILETORUN DISPLAYVALUE TC %1TCoverage Profiler Add-Ins7T$Register this \ݹ+ cov_regs.hF޹+ cov_tune.hN߹+ scov_checkboxlblNotExecutedcov_finddialog.MyEy=D$_fD$G_scov_commandbuttonUTop = 0 Left = 135 Height = 17 Width = 6 BackColor = 0,0,0 Name = "shpSpacer2" 6PROCEDURE Init THIS.Visible = .F. ENDPROC cov_picturetogglelabelcov_finddialog. coverage.vcx cmdSkippedPixelsD Account NameDefauAutoSize = .T. FontBold = .F. BackStyle = 1 Caption = "StackLevel XML Analysis" Height = 15 Left = 16 Top = 322 Width = 122 TabIndex = 20 ZOrderSet = 21 Name = "lblStack" AutoSize = .T. Alignment = 0 Caption = "Not executed:" Height = 15 Left = 16 Top = 157 Width = 69 TabIndex = 8 ZOrderSet = 20 Name = "lblNotExecuted"  scov_labelAutoSize = .T. Alignment = 0 Caption = "Executed:" Height = 15 Left = 16 Top = 127 Width = 50 TabIndex = 6 ZOrderSet = 19 Name = "lblExecuted" cov_optionsdialog. lblExecutedlabel coverage.vcx scov_labelAutoSize = .F. FontName = "Courier New" Caption = "Courier New 8" Height = 23 Left = 113 Top = 287 Width = 423 TabIndex = 19 ZOrderSet = 18 Name = "lblShowFixedFont" cov_optionsdialog.lblShowFixedFontAutoSize = .F. Top = 0 Left = 63 Height = 22 Width = 23 Picture = ("stats.bmp") Caption = ("") TabIndex = 3 SpecialEffect = 2 Name = "cmdStatistics" cov_maindialog_standardjFontName = "Courier New" Height = 228 Left = 0 TabIndex = 3 Top = 167 Width = 392 Name = "edtCode" label coverage.vcx scov_labelAutoSize = .F. Caption = "MS Sans Serif 8" Height = 26 Left = 113 Top = 259 Width = 423 TabIndex = 17 ZOrderSet = 17 Name = "lblShowBaseFont" cov_optionsdialog.lblShowBaseFontlabel coverage.vcx scov_labelcov_optionsdialog.lblMarksMatchedlabelClass coverage.vcxTTop = 0 Left = 56 Height = 17 Width = 6 BackColor = 0,0,0 Name = "shpSpacer1"  coverage.vcxsoft Photo Editor 3.0 PhotooDo checkboxBC:\Program Files\Common Files\MicrosYPROCEDURE Click THISFORM.oCoverageEngine = .NULL. THISFORM.Release() ENDPROC cov_modaldialog.Rcoverage base engine (<- scov_formset, containing toolbar but no visible elements)AutoSize = .T. FontItalic = .F. BackStyle = 1 Caption = "Mark lengths will be matched" Height = 15 Left = 16 Top = 188 Width = 139 TabIndex = 10 ZOrderSet = 16 Name = "lblMarksMatched"  coverage.vcx0000-C000-000000000046}Version5. chkClassesCTProxyStubClsid&{0 scov_label shpSpacer1cov_savepositioncov_maindialog_standard.edtCodeeditbox:separate code window for coverage standard UI in Zoom modeAccounts&OMI Account ManagerI commandbutton coverage.vcxscov_commandbuttoncov_statisticsdialog.7J( _oCoveragecmdLogHISLTURNEDOFFTRACELERRORt%C TRBETWEENv2 commandbutton$Ge T-t& BcmdOK cov_standard cov_engine cov_maindialog_standard.cntTools.cov_optionsdialog. scov_formcov_zoomdialogPROCEDURE Click LOCAL oLabel oLabel = THISFORM.lblShowBaseFont WITH THISFORM.oCoverageEngine DO CASE CASE .GetFontsFromUser(.F.) oLabel.FontName = .cBaseFontName oLabel.FontSize = .nBaseFontSize oLabel.FontItalic = .lBaseFontItalic oLabel.FontBold = .lBaseFontBold oLabel.Caption = oLabel.FontName+" "+ ; ALLTR(STR(oLabel.FontSize)) CASE .lError * did something happen on this call? THISFORM.DisableFontSettingButtons() OTHERWISE *nothing to do ENDCASE ENDWITH ENDPROC 2txtNotExecutedtextboxcov_finddialog.4-0000-0000-C000-000000000046}VCVClass000000}IDAPairTk*TProxy2Version1.0Mj*M&{C46C1BF3-3C52-11D scov_formb&{34F681D0-3640-11CF-9294-00AA00B8ATop = 34 Left = 231 Width = 217 Height = 89 TabIndex = 4 Name = "cntClassesCovered" lblNotCovered.Name = "lblNotCovered" lblCovered.Name = "lblCovered" lblTotal.Name = "lblTotal" lblCoveredCaption.Name = "lblCoveredCaption" lblTotalCaption.Name = "lblTotalCaption" lblPercent.Name = "lblPercent" lblNotCoveredCaption.Name = "lblNotCoveredCaption" lblPercentCaption.Name = "lblPercentCaption" Line2.Name = "Line2" lblName.Name = "lblName" SPROCEDURE synchsizes LOCAL nContainerWidth, nContainerWidth, ; nContainerSpacer, nContainerHeight, oControl #DEFINE nContainerTopMargin SYSMETRIC(3) nContainerWidth = THIS.BorderWidth nContainerHeight = THIS.BorderWidth * 2 nContainerSpacer = (THIS.BorderWidth*2) + nContainerTopMargin FOR EACH oControl IN THIS.Controls nContainerHeight = MAX(nContainerHeight, ; (oControl.Height + ; nContainerSpacer) ) oControl.Left = nContainerWidth oControl.Top = nContainerTopMargin nContainerWidth = nContainerWidth + oControl.WIDTH ENDFOR WITH THIS .WIDTH = nContainerWidth .Height = nContainerHeight ENDWITH THISFORM.nToolCount = THIS.ControlCount RETURN NOT THIS.lError ENDPROC PROCEDURE Init RETURN NOT THIS.lError ENDPROC PROCEDURE Error LPARAMETERS nError, cMethod, nLine THIS.lError = .T. IF TYPE("THISFORMSET.BaseClass") = "C" THISFORMSET.Error(nError,THIS.Name+":"+cMethod,nLine) ELSE Error nError ENDIF ENDPROC  chkWrapAroundotoEd.exe5D5 InProcHandler scov_formsetFontName = "Courier New" Height = 22 Left = 112 TabIndex = 9 Top = 154 Width = 59 ZOrderSet = 15 Name = "txtNotExecuted"  coverage.vcx shpOptions _VBProjectsTCTProxyStubCl coverage.vcx scov_textboxcov_optionsdialog.cntTools cov_regs.h +~FontName = "Courier New" Height = 22 Left = 112 TabIndex = 7 Top = 124 Width = 59 ZOrderSet = 14 Name = "txtExecuted"  txtExecutedtextboxAutoSize = .F. Top = 0 Left = 0 Height = 22 Width = 23 Picture = ("save.bmp") Caption = "" TabIndex = 2 SpecialEffect = 2 Name = "cmdSave"  coverage.vcx scov_textboxcov_optionsdialog. coverage.hٹ+ cov_char.h&ڸ+ cov_locs.h.۹+ cov_dlgs.h6ܹ+ cov_spec.h>ݹ+ cov_regs.hF޹+ cov_tune.hN߹+ coverage.hFontItalic = .F. BackStyle = 1 Caption = (repl("w",36)) Height = 15 Left = 113 Top = 375 Width = 218 TabIndex = 23 ZOrderSet = 16 Name = "lblStackXSLT"  lblStackXSLTlabel cmdAddIns coverage.vcx9PROCEDURE Error LPARAMETERS nError, cMethod, nLine THIS.lError = .T. IF TYPE("THISFORMSET.BaseClass") = "C" THISFORMSET.Error(nError,THIS.Name+":"+cMethod,nLine) ELSE Error nError ENDIF ENDPROC PROCEDURE Option1.Error LPARAMETERS nError, cMethod, nLine THIS.Parent.Error(nError, cMethod, nLine) ENDPROC PROCEDURE Option1.Init IF EMPTY(THIS.Caption+THIS.Picture) AND ; (NOT EMPTY(THIS.ToolTipText) ) THIS.Caption = THIS.ToolTipText ENDIF ENDPROC PROCEDURE Option2.Init IF EMPTY(THIS.Caption+THIS.Picture) AND ; (NOT EMPTY(THIS.ToolTipText) ) THIS.Caption = THIS.ToolTipText ENDIF ENDPROC PROCEDURE Option2.Error LPARAMETERS nError, cMethod, nLine THIS.Parent.Error(nError, cMethod, nLine) ENDPROC cov_finddialog.D8InProcHandler32 coverage.vcx scov_labelAutoSize = .T. FontBold = .F. BackStyle = 1 Caption = "Coverage marks" Height = 15 Left = 16 Top = 101 Width = 79 TabIndex = 5 ZOrderSet = 13 Name = "lblCoverageMarks" cov_optionsdialog.cov_finddialog.ProxyStubClsid32&{00shape5.0QCQ&{0002E165-0000-0000-C000-000PixelsClass1 scov_customcov_saveposition4Height = 19 Width = 40 Name = "cov_saveposition" custom coverage.vcxJPROCEDURE RightClick THISFORMSET.StandardRightClick() ENDPROC ;ExchangeServer In scov_editboxHHeight = 431 Width = 432 DoCreate = .T. Caption = "Coverage Options" HelpContextID = 1895825779 cxsltfilename = ("") Name = "cov_optionsdialog" cmdOK.AutoSize = .F. cmdOK.Top = 16 cmdOK.Left = 350 cmdOK.Height = 23 cmdOK.Width = 75 cmdOK.Cancel = .F. cmdOK.TabIndex = 25 cmdOK.ZOrderSet = 5 cmdOK.Name = "cmdOK" lblCoverageMarkslabel coverage.vcxPROCEDURE ProgrammaticChange THISFORM.FieldToSearch("ObjClass", THIS.Value) ENDPROC PROCEDURE InteractiveChange THISFORM.FieldToSearch("ObjClass", THIS.Value) ENDPROC  coverage.vcx scov_labelcov_optionsdialog.cov_maindialog_standard.]cprojectfrx = ("") lincoverageframe = .T. oframe = .NULL. lsaveformpositions = .T. Name = "cov_standard" cov_toolbar.cusRegistry.Top = 3 cov_toolbar.cusRegistry.Left = 5 cov_toolbar.cusRegistry.Name = "cusRegistry" cov_toolbar.Height = 21 cov_toolbar.Left = 0 cov_toolbar.Top = 0 cov_toolbar.Width = 33 cov_toolbar.Name = "cov_toolbar" chkRegisterDefaults scov_checkbox cmdOptions coverage.vcx{0002E157-0000-0000-C000-000000000046}shpScopeCN&{0002E18C-0000-0000-C000-000000checkboxЃ3‹t twcheckbox scov_textbox046}Version5.0XCX&dLeft = 196 Top = 0 TabIndex = 7 Name = "opgPreviewZoomMode" Option1.Picture = ("preview.bmp") Option1.Caption = ("") Option1.Left = 0 Option1.SpecialEffect = 2 Option1.Top = 0 Option1.Name = "Option1" Option2.Picture = ("zoom.bmp") Option2.Caption = ("") Option2.Left = 23 Option2.SpecialEffect = 2 Option2.Top = 0 Option2.Name = "Option2" Top = 410 Left = 7 Height = 15 Width = 83 AutoSize = .T. BackStyle = 0 Caption = "Set as default" Value = .F. TabIndex = 24 ZOrderSet = 12 Name = "chkRegisterDefaults"  coverage.vcx coverage.vcxTop = 101 Left = 200 Height = 15 Width = 79 FontName = "MS Sans Serif" FontSize = 8 AutoSize = .T. BackStyle = 0 Caption = "\ 0 AND THIS.CancelError * we've forced an error on Esc or Cancel press THIS.FileName = "" NODEFAULT ELSE DODEFAULT(nError,cMethod,nLine) ENDIF ENDPROC scov_commonfiledialogscov_commondialogPROCEDURE setfileorclassnamecaption LPARAMETERS tcCaption IF TYPE("tcCaption") # "C" OR TYPE("THISFORM") # "O" * toolbar doesn't support TextWidth() although _SCREEN does RETURN .F. ENDIF LOCAL lcDisplayText, ; liStartChar, liLabelWidth, liMargin, ; lvFontName, lvFontSize IF THIS.lblName.FontName # THISFORM.FontName OR ; THIS.lblName.FontSize # THISFORM.FontSize * not a problem for the cov_statisticsdialog * but I am not sure how else this container * might be used lvFontName = THISFORM.FontName lvFontSize = THISFORM.FontSize THISFORM.FontName = THIS.lblName.FontName THISFORM.FontSize = THIS.lblName.FontSize ENDIF lcDisplayText = tcCaption liMargin = THISFORM.TextWidth("WWW")*2 liStartChar = 1 liLabelWidth = THIS.lblName.Width DO WHILE liLabelWidth < ; THISFORM.TextWidth(lcDisplayText)+ liMargin liStartChar = liStartChar + 1 lcDisplayText = ".. "+SUBSTR(tcCaption,liStartChar) ENDDO THIS.lblName.Caption = lcDisplayText IF NOT EMPTY(lvFontName) THISFORM.FontName = lvFontName THISFORM.FontSize = lvFontSize ENDIF ENDPROC  cov_registryscov_commonfiledialog cov_dlgs.hiFontName = "Courier New" Alignment = 0 Height = 172 Left = 0 Top = 0 Width = 280 Name = "edtCode" Schedule+scov_commandbuttonCZ.DBF BC@scov_optiongroup coverage.vcx optiongroupcov_picturetogglePROCEDURE Click THISFORM.oCoverageEngine.ShowTextLog(.T.) ENDPROC PROCEDURE Init THIS.Caption = COV_STATS_VIEW_SOURCE_LOG_LOC ENDPROC cov_statisticsdialog.(Ceditbox9 Communicator Installededitboxformntral Europeanwhw1251 IE cmdProjectNBASEMONOFONTSIZELBASEMONOFONTBOLDLBASEMcov_optionsdialog. cmdBaseFontClass1Pixels"graphical option button group of 2cov_picturetoggleColumnCount = 2 ColumnWidths = (STR(THISFORM.WIDTH/2)+","+STR(THISFORM.WIDTH*2)) RowSourceType = 6 Value = 1 Height = 132 Left = 0 TabIndex = 2 Top = 37 Width = 392 IntegralHeight = .T. Name = "lstAvailableObjectsAndProcs" -PROCEDURE ProgrammaticChange ENDPROC  scov_label commandbuttonSEFONTSIZE LBASEFONTBOLDLBASEFONTITALIC coverage.vcxopgCoverageProfileMode cov_maindialog_standard.cntTools. scov_shape1cmdSave scov_checkbox commandbutton coverage.vcxcov_finddialog.ertyTCTProxyStubClsid coverage.vcxARKEXECUTEDCMARKNOTEXECUTEDLREGISTERADDI cov_regs.hAutoSize = .F. Top = 254 Left = 16 Height = 23 Width = 90 WordWrap = .F. Caption = "Display Font..." TabIndex = 16 ZOrderSet = 10 Name = "cmdBaseFont" scov_commandbuttoncov_optionsdialog.scov_commandbuttonBackStyle = 0 Height = 55 Left = 192 Top = 107 Width = 150 TabIndex = 12 ZOrderSet = 1 Name = "opgStartMode" Option1.Caption = "Coverage" Option1.Height = 15 Option1.Left = 8 Option1.Top = 12 Option1.Width = 64 Option1.AutoSize = .T. Option1.Name = "Option1" Option2.Caption = "Profile" Option2.Height = 15 Option2.Left = 8 Option2.Top = 32 Option2.AutoSize = .T. Option2.Name = "Option2" AutoSize = .F. Top = 370 Left = 16 Height = 23 Width = 90 WordWrap = .F. Caption = "XSL Transform..." TabIndex = 22 ZOrderSet = 10 Name = "cmdStackXSLT"  cmdStackXSLT cov_enginecov_engine.COV_TOOLBAR.label32&{00020424-0000-0000-C000-000000000046 scov_shape commandbutton coverage.vcxcPROCEDURE Init THIS.Caption = COV_STATS_VIEW_DETAILS_LOC RETURN DODEFAULT() ENDPROC AutoSize = .T. FontName = "MS Sans Serif" FontSize = 8 BackStyle = 1 Caption = "Options" Height = 15 Left = 15 Top = 41 Width = 38 TabIndex = 3 Name = "lblOptions"  commandbuttoncov_maindialog_standard. scov_labelTypeLib&{0002E157-0000-0000-scov_commandbuttoncov_statisticsdialog.cov_optionsdialog.Top = 34 Left = 10 Width = 217 Height = 89 TabIndex = 3 Name = "cntLinesCovered" lblNotCovered.Name = "lblNotCovered" lblCovered.Name = "lblCovered" lblTotal.Name = "lblTotal" lblCoveredCaption.Name = "lblCoveredCaption" lblTotalCaption.Name = "lblTotalCaption" lblPercent.Name = "lblPercent" lblNotCoveredCaption.Name = "lblNotCoveredCaption" lblPercentCaption.Name = "lblPercentCaption" Line2.Name = "Line2" lblName.Name = "lblName" AutoSize = .F. Top = 159 Left = 162 Height = 23 Width = 138 Caption = "Source Text Log" TabIndex = 7 ZOrderSet = 4 Name = "cmdLog" <UTHISRESUMECOVERAGELTAutoSize = .F. Top = 12 Left = 348 Height = 23 Width = 75 Cancel = .T. Caption = "OK" Default = .T. ToolTipText = "OK" Name = "cmdOK"  chkSourcecodelabel00-C000-000000000046} _PropertiesTCscov_commandbuttonPROCEDURE Click THISFORM.oCoverageEngine.ShowProjectStatistics() ENDPROC PROCEDURE Init THIS.Caption = COV_STATS_VIEW_PROJECT_LOC ENDPROC AutoSize = .F. Top = 159 Left = 17 Height = 23 Width = 138 Caption = "Statistics By Project..." TabIndex = 6 ZOrderSet = 3 Name = "cmdProject" LUSINGREGISTRYAADDINSSETREGI coverage.vcxr NewIEPropFontNameArialPixels.from Randy Brown's REGISTRY.PRG, <-scov_custom shpSplitterAutoSize = .T. BackStyle = 1 Caption = "View Details" Height = 18 Left = 19 Top = 140 Width = 76 TabIndex = 5 ZOrderSet = 2 Name = "lblView" lblViewlabel coverage.vcx scov_labelPROCEDURE RightClick THISFORMSET.StandardRightClick() ENDPROC PROCEDURE DragDrop LPARAMETERS oSource, nXCoord, nYCoord THISFORM.RespondToSplitter(nYCoord - THISFORM.shpSplitter.Height) RETURN NOT THIS.lError ENDPROC cPROCEDURE Init THIS.Caption = COV_STATS_VIEW_DETAILS_LOC RETURN DODEFAULT() ENDPROC cov_statisticsdialog. lblStatisticsshape coverage.vcx scov_shape containers in _SCREEN or something RETURN .F. ENDIF coverage.vcxtion") # "C" OR TYPE("THISFORM") # "O" *PROCEDURE RightClick THISFORMSET.StandardRightClick() ENDPROC PROCEDURE Init STORE THISFORM.BackColor TO THIS.BackColor, ; THIS.BorderColor, ; THIS.FillColor ENDPROC Classcov_maindialog_standard.lstAvailableObjectsAndProcsTop = 71 Left = 16 Height = 15 Width = 154 AutoSize = .T. Alignment = 0 BackStyle = 0 Caption = "Mark all code while log loads" TabIndex = 4 ZOrderSet = 9 Name = "chkMarkAllOnLoad"  cusRegistrychkMarkAllOnLoad commandbutton4PROCEDURE ProgrammaticChange DODEFAULT() THISFORM.CheckFindButton(.T.) ENDPROC PROCEDURE InteractiveChange DODEFAULT() THISFORM.CheckFindButton(.T.) ENDPROC PROCEDURE KeyPress LPARAMETERS nKeyCode, nShiftAltCtrl IF DODEFAULT(nKeyCode,nShiftAltCtrl) IF nKeyCode = 13 * somehow if I don't swallow * the keypress in this modaless * dialog it ends up pressing a * button in the main button interface NODEFAULT THISFORM.cmdOK.Click() RETURN .F. ENDIF ELSE RETURN .F. ENDIF ENDPROC PROCEDURE Init THIS.ToolTipText = COV_OPTIONS_LOC RETURN DODEFAULT() ENDPROC PROCEDURE Click THISFORMSET.GetOptionsFromUser() RETURN NOT THIS.lError ENDPROC custom optiongroupcheckboxcTop = 93 Left = 8 Height = 31 Width = 283 BackStyle = 0 SpecialEffect = 0 Name = "shpScope" 00-0000-C000-00000000 coverage.vcxPROCEDURE ProgrammaticChange THISFORM.FieldToSearch("Hostfile", THIS.Value) ENDPROC PROCEDURE InteractiveChange THISFORM.FieldToSearch("Hostfile", THIS.Value) ENDPROC  coverage.vcx scov_checkboxcov_optionsdialog.AutoSize = .T. BackStyle = 1 Caption = "Statistics" Height = 18 Left = 16 Top = 10 Width = 55 TabIndex = 2 ZOrderSet = 2 Name = "lblStatistics" PROCEDURE Click LOCAL lcFile WITH THISFORM lcFile = .oCoverageEngine.GetResourceLocation("", ; COV_GETXSLTFILE_TITLE_LOC, ; COV_XSLFILES_LOC + " (*.xsl;*.xslt)|*.xsl;*.xslt|" + ; COV_ALLFILES_LOC+" (*.*)|*.*" ,; .cXSLTFileName, ; "GETFILE" ) IF NOT EMPTY(SYS(2000,lcFile)) .SetStackXSLTDisplayName(lcFile) .cXSLTFileName = lcFile ENDIF ENDWITH ENDPROC chkRegisterAddInsTop = 56 Left = 127 Height = 15 Width = 80 FontName = "MS Sans Serif" FontSize = 8 AutoSize = .T. BackStyle = 0 Caption = "\ scov_shape FG-( -+C+ scov_commandbutton4PROCEDURE Init THIS.Visible = .F. ENDPROC cov_statisticsdialog. TCG((Hostfile-Top = 346 Left = 16 Height = 15 Width = 212 AutoSize = .T. Alignment = 0 BackStyle = 0 Caption = "Generate extended StackLevel XML tree" TabIndex = 21 ZOrderSet = 7 Name = "chkExtendedStackXML" chkExtendedStackXMLcheckbox)MS Sans Serif, 0, 8, 5, 13, 11, 11, 2, 0 nvertTocov_finddialogt Imager 2.0 Picture-D- No coverage.vcxeE+\qYeE;\qYteE.L\Y,qYshpFrameTCTarget > TUTop = 1 Left = 244 Height = 17 Width = 6 BackColor = 0,0,0 Name = "shpSpacer4" sTop = 17 Left = 7 Height = 117 Width = 447 BackStyle = 0 SpecialEffect = 0 ZOrderSet = 0 Name = "shpFrame" TempshapePROCEDURE InteractiveChange * this formset is assuming one set of * files, one main dialog, no real need to pass aliases... THISFORMSET.ToggleCoverageProfileMode() THISFORM.lstAvailableObjectsAndProcs.Valid() RETURN NOT THIS.lError ENDPROC PROCEDURE Option1.Init THIS.ToolTipText = COV_COVERAGE_MODE_LOC RETURN DODEFAULT() ENDPROC PROCEDURE Option2.Init THIS.ToolTipText = COV_PROFILE_MODE_LOC RETURN DODEFAULT() ENDPROC  commandbutton coverage.vcx scov_checkboxcov_optionsdialog. cmdCancelcmdOpen cov_standard cov_maindialog_standard.cntTools. coverage.hٹ+ cov_char.h&ڸ+ cov_locs.h.۹+ cov_dlgs.h6ܹ+ cov_spec.h>ݹ+ cov_regs.hF޹+ cov_tune.hN߹+osoft Imager 2.0 Picture->D- NotInsertabl1 coverage.vcx shpSpacer4 coverage.h scov_shapeDragMode = 1 DragIcon = ("ho_split.cur") DefLeft = Top = 161 Left = (-THISFORM.nmargin) Height = 2 Width = 404 BorderWidth = 0 FillStyle = 0 MousePointer = 7 Name = "shpSplitter" Pixelsshapeformed does not exist.Coverage Profiler Pro coverage.vcx%CC ] T UC~PROCEDURE Click THISFORM.RestoreEngineFonts() THISFORM.oCoverageEngine = .NULL. THISFORM.Release() ENDPROC  commandbutton coverage.h5subclass of cov_engine to invoke coverage standard UI coverage.vcxHeight = 231 Width = 461 DoCreate = .T. Caption = "Coverage Statistics" HelpContextID = 1895825781 Name = "cov_statisticsdialog" cmdOK.AutoSize = .F. cmdOK.Top = 201 cmdOK.Left = 379 cmdOK.Height = 23 cmdOK.Width = 75 cmdOK.TabIndex = 1 cmdOK.Name = "cmdOK" AutoSize = .F. Top = 41 Left = 225 Width = 66 Cancel = .T. Caption = "Cancel" ToolTipText = "Cancel" Name = "cmdCancel"  coverage.vcx coverage.vcx coverage.vcx txtSearch00000046}VCVProxyStubClsid32cov_finddialog.0-0000-C000-000000000046}cCcpFontSize = 8 Height = 23 Left = 60 MaxLength = 255 TabIndex = 2 Top = 12 Width = 156 Name = "txtSearch" 00-C000-AutoSize = .F. Top = 0 Left = 253 Height = 22 Width = 23 Picture = ("find.bmp") Caption = ("") TabIndex = 8 SpecialEffect = 2 Name = "cmdFind" )MS Sans Serif, 0, 8, 5, 13, 11, 11, 2, 0 ,utility.fxp,5 cov_maindialog5,utility.fxp,5 0.000,,toolbarenableHeight = 250 Width = 450 ShowWindow = 1 DoCreate = .T. AutoCenter = .T. BorderStyle = 2 Caption = "Dialog for Modal Calls from within Coverage Engine Formset" MaxButton = .F. MinButton = .F. Icon = ("coverage.ico") Name = "cov_modaldialog" scov_commandbutton8Modaless "Find" dialog for Coverage Profiler standard UI scov_shapeClass13PROCEDURE Click LOCAL oLabel oLabel = THISFORM.lblShowFixedFont WITH THISFORM.oCoverageEngine .lError = .F. DO CASE CASE .GetFontsFromUser(.T.) oLabel.FontName = .cBaseMonoFontName oLabel.FontSize = .nBaseMonoFontSize oLabel.FontItalic = .lBaseMonoFontItalic oLabel.FontBold = .lBaseMonoFontBold oLabel.Caption = oLabel.FontName+" "+ ; ALLTR(STR(oLabel.FontSize)) CASE .lError * did something happen on this call? THISFORM.DisableFontSettingButtons() OTHERWISE *nothing to do ENDCASE ENDWITH ENDPROC scov_commandbuttonocoverageengine  cov_registrycov_optionsdialog.shpOptionsFramenuserkey cregdllfile ncurrentos ncurrentkey lloadeddlls lcreatekey lcreatekeyonset *loadregfuncs *openkey *closekey *setregkey *getregkey *getkeyvalue *setkeyvalue *deletekey *enumoptions *iskey *enumkeys *enumkeyvalues AutoSize = .F. Top = 45 Left = 350 Height = 23 Width = 75 Cancel = .T. Caption = "Cancel" TabIndex = 26 ZOrderSet = 6 Name = "cmdCancel" shapeeTop = 48 Left = 8 Height = 31 Width = 208 BackStyle = 0 SpecialEffect = 0 Name = "shpOptions" &{0002E157-0000scov_commandbutton scov_shape coverage.vcx000-C000-000000000046}cCcTy cov_maindialog_standard.cntTools.cov_modaldialogcov_finddialog coverage.hٹ+ cov_char.h&ڸ+ cov_locs.h.۹+ cov_dlgs.h6ܹ+ cov_spec.h>ݹ+ cov_regs.hF޹+ cov_tune.hN߹+ 0.013,,toolbarenabled,71,utility.fxp,5 0.000,,t coverage.h 0.000,,toolbarenabled,74,utility.fxp,5 labelPixelsd,72,utility.fxp,5 0.000,,toolbarenabled,73,0suggested base-level main dialog for coverage UIClass1 scov_form,PROCEDURE Click RELEASE THISFORM ENDPROC cov_finddialog.cov_maindialog*synchsizes form.fxp,5 0.000,,toolbarenabled,71,utility.fxp,5  cmdCancel9PROCEDURE Init LOCAL lReturn lReturn = DODEFAULT() IF lReturn THIS.Caption = COV_DIALOG_CAPTION_LOC ENDIF RETURN lReturn AND NOT THIS.lError ENDPROC PROCEDURE Unload LOCAL oForm, lOtherMainDialogs IF TYPE("THISFORMSET.cSourceFile") # "C" OR EMPTY(THISFORMSET.cSourceFile) RETURN ENDIF FOR EACH oForm IN THISFORMSET.Forms IF oForm.CLASS == THIS.CLASS lOtherMainDialogs = .T. EXIT ENDIF ENDFOR IF NOT lOtherMainDialogs RELEASE THISFORMSET ENDIF ENDPROC wHeight = 93 Width = 269 DoCreate = .T. AutoCenter = .T. Caption = "Coverage Main Dialog" Name = "cov_maindialog" tyTop = 16 Left = 7 Height = 79 Width = 335 BackStyle = 0 SpecialEffect = 0 ZOrderSet = 4 Name = "shpOptionsFrame"  coverage.vcx scov_shapecov_optionsdialog.shape&{0002E157-0000-0000-C000-000000000046} scov_labeloduleTCTProxyStubClsidopgPreviewZoomMode commandbuttonPROCEDURE Init THIS.ToolTipText = COV_SAVE_LOC RETURN DODEFAULT() ENDPROC PROCEDURE Click THISFORMSET.SaveTargetToDisk() RETURN NOT THIS.lError ENDPROC Class optiongroup coverage.vcx coverage.vcxcov_picturetoggle4PROCEDURE Init THIS.Visible = .F. ENDPROC  coverage.vcxed,74,utility.fxp,5 0.000,,formisobjecUTop = 0 Left = 189 Height = 17 Width = 6 BackColor = 0,0,0 Name = "shpSpacer3" scov_commandbuttoncov_finddialog.wTop = 241 Left = 7 Height = 75 Width = 335 BackStyle = 0 SpecialEffect = 0 ZOrderSet = 3 Name = "shpFontFrame"  shpFontFrameshapecheckboxshapescov_containerform cov_maindialog_standard.cntTools.formset lblOptions cov_maindialog_standard.cntTools.label shpSpacer3cov_finddialog.000000000046}VCVProxyStu lblLookForStubClsid&{00020424-0000-0000-C000- coverage.vcxcov_optionsdialog.scov_optiongroup coverage.vcxformset coverage.vcx coverage.vcxVersion5.0QCQ&{000 commandbuttonTop = 101 Left = 118 Height = 15 Width = 39 FontName = "MS Sans Serif" FontSize = 8 AutoSize = .T. BackStyle = 0 Caption = "F\ 0)) csourcefile = ("") cdefaultwritepath = ("") csuspendedlog = ("") csavedtargetdbf = ("") csourcealias = ("FromLog") ctargetalias = ("MarkedCode") cskippedalias = ("SkippedFiles") ccovfilesalias = ("IgnoredFiles") cmarknotexecuted = ("|"+SPACE(3)) cmarkexecuted = ("") lsmartpath = .T. nbasefontsize = 8 cbasefontname = ("MS Sans Serif") cbasemonofontname = ("Courier New") nbasemonofontsize = 8 lusingregistry = .T. capphome = ("") cprojectalias = ("PJXFiles") caddin = ("") oframe = .NULL. csavedskipfiles = ("") itargetreccount = 0 ilenhostfile = 115 ilenobjclass = 115 ilenexecuting = 115 ilenduration = (IIF("05." $ VERS() OR ("06.00" $ VERS() AND VAL(SUBS(VERS(4),7)) < 8365),8,11)) csavedstackxml = ("") cstackxslt = ("") Name = "cov_engine" COV_TOOLBAR.Caption = "Invisible Custom Obj Holder" COV_TOOLBAR.Height = 21 COV_TOOLBAR.Left = 0 COV_TOOLBAR.Movable = .F. COV_TOOLBAR.ShowTips = .F. COV_TOOLBAR.Sizable = .F. COV_TOOLBAR.Top = 0 COV_TOOLBAR.Visible = .F. COV_TOOLBAR.Width = 33 COV_TOOLBAR.ControlBox = .F. COV_TOOLBAR.Name = "COV_TOOLBAR"  PROCEDURE Init LPARAMETERS toEngineRef LOCAL lReturn, cTarget, iSelect, cHost, iPos lReturn = DODEFAULT(toEngineRef) IF lReturn THIS.Caption = COV_DIALOG_CAPTION_LOC+" "+ ; COV_STATISTICS_LOC+ ": "+ ; SUBSTR(THIS.oCoverageEngine.cSourceFile, ; RAT("\",THIS.oCoverageEngine.cSourceFile) + 1) THIS.lblStatistics.Caption = COV_STATISTICS_LOC THIS.lblView.Caption = COV_STATS_VIEW_DETAILS_LOC cTarget = THIS.oCoverageEngine.GetAlias(,"Target") iSelect = SELECT() SELECT (cTarget) cHost = UPPER(ALLTR(Hostfile)) WITH THIS.cntLinesCovered .SetAll("FontName", THIS.FontName) .SetAll("FontSize", THIS.FontSize) .lblCovered.Caption = STR(Covered) .lblNotCovered.Caption = STR(Coverable-Covered) .lblTotal.Caption = STR(Coverable) .lblPercent.Caption = STR((Covered/Coverable)*100,10,2) .lblCoveredCaption.Caption = ; COV_STATS_LINES_HIT_LOC .lblNotCoveredCaption.Caption = ; COV_STATS_LINES_MISSED_LOC .lblTotalCaption.Caption = ; COV_STATS_LINES_COVERABLE_LOC .lblPercentCaption.Caption = ; COV_STATS_PCT_LINES_LOC ENDWITH IF (NOT COV_TOPSPEED) AND INLIST(FileType,".vct", ".sct", ".frt", ".lbt") WITH THIS.cntClassesCovered .SetAll("FontName", THIS.FontName) .SetAll("FontSize", THIS.FontSize) .SetFileOrClassNameCaption(cHost) .lblCovered.Caption = STR(ObjHits) .lblNotCovered.Caption = STR(ObjTotal-ObjHits) .lblTotal.Caption = STR(ObjTotal) .lblPercent.Caption = STR((ObjHits/ObjTotal)*100,10,2) .lblCoveredCaption.Caption = ; COV_STATS_OBJS_HIT_LOC .lblNotCoveredCaption.Caption = ; COV_STATS_OBJS_MISSED_LOC .lblTotalCaption.Caption = ; COV_STATS_OBJS_COVERABLE_LOC .lblPercentCaption.Caption = ; COV_STATS_PCT_OBJS_LOC ENDWITH cHost =UPPER(ALLTR(ObjClass)) iPos = AT("!",cHost) DO CASE CASE iPos = 0 * okay CASE iPos = 1 * shouldn't happen but JIC cHost = SUBSTR(cHost,2) CASE iPos = LEN(cHost) * ditto cHost = LEFT(cHost,iPos-1) OTHERWISE cHost = SUBSTR(cHost,iPos + 1) ENDCASE THIS.cntLinesCovered.SetFileOrClassNameCaption(cHost) ELSE WITH THIS.cntLinesCovered .Width = THIS.shpFrame.Width -((.Left-THIS.shpFrame.Left)*2) .lblName.Width = .Width - (.lblName.Left*2) .SetFileOrClassNameCaption(cHost) ENDWITH THIS.cntClassesCovered.Visible = .F. ENDIF SELECT (iSelect) ENDIF RETURN lReturn AND NOT THIS.lError ENDPROC PROCEDURE Error LPARAMETERS nError, cMethod, nLine DODEFAULT(nError,cMethod,nLine) ENDPROC PROCEDURE cmdOK.Init LOCAL lReturn lReturn = DODEFAULT() THIS.Caption = COV_OKCLOSE_LOC RETURN lReturn ENDPROC Rsavedbasefontname Saved engine font attribute for later restoration if dialog is cancelled savedbasefontsize Saved engine font attribute for later restoration if dialog is cancelled savedbasefontitalic Saved engine font attribute for later restoration if dialog is cancelled savedbasefontbold Saved engine font attribute for later restoration if dialog is cancelled savedfixedfontname Saved engine font attribute for later restoration if dialog is cancelled savedfixedfontsize Saved engine font attribute for later restoration if dialog is cancelled savedfixedfontitalic Saved engine font attribute for later restoration if dialog is cancelled savedfixedfontbold Saved engine font attribute for later restoration if dialog is cancelled cxsltfilename Holds full name of XSLT filename for transferring to the engine's cStackXSLT property if the change is confirmed by the user pressing "OK" in this dialog. (Fully qualified name probably won't fit in the label display.) *setoptions Send all appropriate engine properties to appropriate values from the dialog - NB fonts are already done automatically, and have to be un-done if we cancel. *getoptions Get dialog values from current engine values *restoreenginefonts Restore engine font values that may have been re-set by users' choices if the option dialog is cancelled. *disablefontsettingbuttons Not currenty used, can disable font setting capabilities if OCXs are not available and you do not wish to allow GetFont() use. *setstackxsltdisplayname Shorten the engine.cStackXSLT property name to fit the display space for THIS.lblStackXSLT.Caption. =lfastzoommode In Zoom mode, indicates whether Coverage should refrain from marking a record unless specifically indicated by the user, to avoid unnecessary processing. cprojectfrx The name of the report form that will be called by DisplayProjectStatistics to display the project statistics cursor. Defaults to COV_PROJECT_FRX in COV_TUNE.H. *notifyzoomwindowclosed Puts interface elements into Preview mode and synchronizes these elements as necessary when the Zoom window is closed. *synchzoomwindowstate Makes sure that state of Zoom window matches current Preview/Zoom mode. *notifytargetrecordchanged Synchronizes all coverage UI elements when the record pointer has moved in the target workfile. *showmodaldialog Instantiates modal dialogs as part of coverage standard UI. *getoptionsfromuser Invokes Options dialog and applies results of user's selections, if appropriate. *showtextlog Displays the original Coverage source log. *showskippedfiles Displays browse of source files that weren't Located or that are weren't parsed because they're ignored as part of the coverage app's own file list. *arrangeframewindows Cascades all windows within the frame when Coverage is running in Coverage frame. *togglefastzoommode Signals interface elements that Fast Zoom mode has been toggled on or off. *showfinddialog Shows the modaless Find dialog (instantiates it as necessary and brings it forward). *settargetrow Provides RECNO() from which the proper row of the target cursor to display in the interface can be derived (accounting for deleted records and other records eliminated because of filters). *showtargettext Tells UI to select a particular string within source code display. When Find target is found in source code, this method provides the Find dialog with behavior resembling the internal Find dialog used with a text file. PROCEDURE RightClick THISFORMSET.StandardRightClick() ENDPROC PROCEDURE Valid THISFORMSET.MarkOneTargetRecord() THISFORMSET.NotifyTargetRecordChanged() ENDPROC PROCEDURE InteractiveChange THISFORMSET.NotifyTargetRecordChanged() ENDPROC PROCEDURE MouseDown LPARAMETERS nButton, nShift, nXCoord, nYCoord THISFORM.iListMouseStart = nXCoord RETURN ENDPROC PROCEDURE MouseMove LPARAMETERS nButton, nShift, nXCoord, nYCoord WITH THISFORM IF BETWEEN(nXCoord,; .ileftlistcolwidth - (.nMargin*2), ; .ileftlistcolwidth + (.nMargin*2)) THIS.MousePointer = MOUSEPOINTER_ARROW_EW ELSE THIS.MousePointer = MOUSEPOINTER_DEFAULT ENDIF IF nButton = 1 AND (nXCoord < (THIS.WIDTH-SYSM(5))) .ileftlistcolwidth = ; .ileftlistcolwidth - ; (.ilistmousestart - nXCoord) .ilistmousestart = nXCoord .AdjustListColumnWidths() ENDIF ENDWITH ENDPROC PROCEDURE DragDrop LPARAMETERS oSource, nXCoord, nYCoord THISFORM.RespondToSplitter(nYCoord) RETURN NOT THIS.lError ENDPROC `PROCEDURE Init LOCAL ARRAY aTemp[1] ASSERT TYPE("THISFORMSET") = "O" AND ; AMEMBERS(aTemp,THISFORMSET,1) > 0 ; AND ASCAN(aTemp,"LIGNORECOVERAGEFILENAMES") > 0 LOCAL lReturn lReturn = DODEFAULT() IF lReturn WITH THIS IF THIS.Parent.lInCoverageFrame .WIDTH = THIS.Parent.oFrame.WIDTH - (SYSMETRIC(3)*2) .Height = THIS.Parent.oFrame.Height * .25 .Left = SYSMETRIC(3) .Top = THIS.Parent.frmMainDialog.Top + ; THIS.Parent.frmMainDialog.Height + ; (SYSMETRIC(9) * 2) ELSE THIS.Left = THIS.Parent.frmMainDialog.Left - SYSMETRIC(9) THIS.Top = THIS.Parent.frmMainDialog.Top - SYSMETRIC(9) ENDIF ENDWITH THIS.Resize() ENDIF RETURN lReturn ENDPROC PROCEDURE QueryUnload IF THIS.ReleaseType = 1 THIS.Hide() THISFORMSET.NotifyZoomWindowClosed() NODEFAULT ENDIF ENDPROC PROCEDURE RightClick THISFORMSET.StandardRightClick() ENDPROC PROCEDURE Resize THIS.edtCode.WIDTH = THIS.WIDTH THIS.edtCode.Height = THIS.Height ENDPROC PROCEDURE KeyPress LPARAMETERS nKeyCode, nShiftAltCtrl IF nKeyCode = 93 THISFORMSET.StandardRightClick() NODEFAULT ENDIF ENDPROC &PROCEDURE RightClick THIS.oCoverageEngine.StandardRightClick() NODEFAULT ENDPROC PROCEDURE Deactivate IF TYPE("THIS.oCoverageEngine.Class") = "C" THIS.oCoverageEngine.Deactivate() ENDIF ENDPROC PROCEDURE Destroy THIS.oCoverageEngine = .NULL. ENDPROC PROCEDURE Init LPARAMETERS toEngineRef LOCAL ARRAY aTemp[1] ASSERT TYPE("toEngineRef.Baseclass") = "C" AND ; AMEMBERS(aTemp,toEngineRef) > 0 ; AND ASCAN(aTemp,"LIGNORECOVERAGEFILENAMES") > 0 THIS.oCoverageEngine = toEngineRef THIS.Caption = _VFP.Name + " " + COV_APPLICATION_NAME_LOC DECLARE INTEGER GetSysColor IN Win32API INTEGER nColorAspect THIS.BackColor = GetSysColor(12) && MDI Workspace ENDPROC PROCEDURE QueryUnload IF THIS.ReleaseType = 1 IF TYPE("THIS.oCoverageEngine.BaseClass") = "C" THIS.oCoverageEngine = .NULL. COV_PUBLIC_VARIABLE.Release() ENDIF ENDIF ENDPROC PROCEDURE Activate IF TYPE("THIS.oCoverageEngine.Forms(2).Class") = "C" THIS.oCoverageEngine.Forms(2).Activate() NODEFAULT ENDIF ENDPROC PROCEDURE KeyPress LPARAMETERS nKeyCode, nShiftAltCtrl IF nKeyCode = 93 THIS.oCoverageEngine.StandardRightClick() NODEFAULT ENDIF ENDPROC PROCEDURE Destroy THIS.oCoverageEngine = .NULL. ENDPROC PROCEDURE Error LPARAMETERS nError, cMethod, nLine THIS.lError = .T. THIS.oCoverageEngine.Error(nError,THIS.Name+":"+cMethod,nLine) ENDPROC PROCEDURE Init LPARAMETERS toEngineRef LOCAL ARRAY aTemp[1] ASSERT TYPE("toEngineRef.Baseclass") = "C" AND ; AMEMBERS(aTemp,toEngineRef) > 0 ; AND ASCAN(aTemp,"LIGNORECOVERAGEFILENAMES") > 0 THIS.oCoverageEngine = toEngineRef *&* THIS.SetAll("FontName",THIS.oCoverageEngine.cBaseFontName) *&* removed so that Coverage font properties do not *&* presently affect modal dialog base fonts. *&* Note that, even if this is put back in, *&* it's not advisable for the modal dialog font sizes and *&* styles to obey Coverage font information, just the font. *&* Instead, according to MS code and specs, the following *&* should handle standard dialog attributes: *&* add here for recursion into containers? *&* toEngineRef.SetStandardDialogAttributes() IF FONTMETRIC(1, 'MS Sans Serif', 8, '') # 13 OR ; FONTMETRIC(4, 'MS Sans Serif', 8, '') # 2 OR ; FONTMETRIC(6, 'MS Sans Serif', 8, '') # 5 OR ; FONTMETRIC(7, 'MS Sans Serif', 8, '') # 11 THIS.SetAll('fontname', 'Arial') THIS.FontName = 'Arial' ELSE THIS.SetAll('fontname','MS Sans Serif') THIS.FontName = 'MS Sans Serif' ENDIF THIS.SetAll('fontsize',8) THIS.FontSize = 8 ENDPROC  ࡱ> Root Entry`պY@OleObjectData\AccessObjSiteData&\ChangedProps<+/I!C4OO< \$828C4C820-401A-101B-A3C9-08002B2F49FBA 0, ; "_"+THIS.txtExecuted.Value, ; THIS.txtExecuted.Value) .cMarkNotExecuted = IIF(NOT EMPTY(THIS.txtNotExecuted.Value) AND ; VAL(THIS.txtNotExecuted.Value) > 0, ; "_"+THIS.txtNotExecuted.Value, ; THIS.txtNotExecuted.Value) ENDWITH RETURN NOT THIS.lError ENDPROC PROCEDURE getoptions * get dialog values from current engine values LOCAL oBaseLabel, oFixedLabel oBaseLabel = THIS.lblShowBaseFont oFixedLabel = THIS.lblShowFixedFont WITH THIS.oCoverageEngine THIS.SetStackXSLTDisplayName(.cStackXSLT) THIS.chkExtendedStackXML.Value = .lStackXMLExtendedTree THIS.chkSmartPath.Value = .lSmartPath THIS.chkRegisterAddIns.Value = .lRegisterAddIn THIS.chkMarkAllOnLoad.Value = .lMarkAllOnLoad THIS.opgStartMode.Value = IIF(.lStartInProfileMode,2,1) THIS.opgFrame.Value = IIF(.lInCoverageFrame,1,2) THIS.txtExecuted.Value = .cMarkExecuted THIS.txtNotExecuted.Value = .cMarkNotExecuted oBaseLabel.FontName = .cBaseFontName oBaseLabel.FontSize = .nBaseFontSize oBaseLabel.FontItalic = .lBaseFontItalic oBaseLabel.FontBold = .lBaseFontBold oFixedLabel.FontSize = .nBaseMonoFontSize oFixedLabel.FontItalic = .lBaseMonoFontItalic oFixedLabel.FontBold = .lBaseMonoFontBold THIS.SavedBaseFontName = .cBaseFontName THIS.SavedBaseFontSize = .nBaseFontSize THIS.SavedBaseFontItalic = .lBaseFontItalic THIS.SavedBaseFontBold = .lBaseFontBold THIS.SavedFixedFontName = .cBaseMonoFontName THIS.SavedFixedFontSize = .nBaseMonoFontSize THIS.SavedFixedFontItalic = .lBaseMonoFontItalic THIS.SavedFixedFontBold = .lBaseMonoFontBold THIS.SetAll("FontName",.cBaseMonoFontName,"textbox") oFixedLabel.FontName = .cBaseMonoFontName ENDWITH oBaseLabel.Caption = oBaseLabel.FontName+" "+ ; ALLTR(STR(oBaseLabel.FontSize)) oFixedLabel.Caption = oFixedLabel.FontName+" "+ ; ALLTR(STR(oFixedLabel.FontSize)) ENDPROC PROCEDURE restoreenginefonts WITH THIS.oCoverageEngine .cBaseFontName = THIS.SavedBaseFontName .nBaseFontSize = THIS.SavedBaseFontSize .lBaseFontItalic = THIS.SavedBaseFontItalic .lBaseFontBold = THIS.SavedBaseFontBold .cBaseMonoFontName = THIS.SavedFixedFontName .nBaseMonoFontSize = THIS.SavedFixedFontSize .lBaseMonoFontItalic = THIS.SavedFixedFontItalic .lBaseMonoFontBold = THIS.SavedFixedFontBold ENDWITH RETURN NOT THIS.lError ENDPROC PROCEDURE disablefontsettingbuttons STORE .F. TO ; THIS.cmdBaseFont.Enabled, ; THIS.cmdFixedFont.Enabled ENDPROC PROCEDURE setstackxsltdisplayname LPARAMETERS tcFileName LOCAL lcFile, liChars lcFile = "" IF VARTYPE(tcFileName) = "C" AND NOT EMPTY(tcFileName) *!* IF OCCURS("\",tcFileName) > 1 *!* lcFile = ".."+SUBSTR(tcFileName,RAT("\",tcFileName,2)) *!* ELSE *!* lcFile = tcFileName *!* ENDIF WITH THISFORM.lblStackXSLT liChars = CEILING(.Width/; FONTMETRIC(6,; .FontName, .FontSize, ; IIF(.FontBold,"B","")+ ; IIF(.FontItalic,"I",""))) lcFile = DISPLAYPATH(tcFileName,liChars) ENDWITH ENDIF THIS.lblStackXSLT.Caption = lcFile RETURN .T. ENDPROC PROCEDURE Error LPARAMETERS nError, cMethod, nLine THIS.oCoverageEngine.Error(nError,cMethod,nLine) ENDPROC PROCEDURE Init LPARAMETERS toEngineRef LOCAL lReturn lReturn = DODEFAULT(toEngineRef) IF lReturn THIS.Caption = COV_DIALOG_CAPTION_LOC +" "+COV_OPTIONS_LOC THIS.cmdOK.Caption = COV_OKCLOSE_LOC THIS.cmdCancel.Caption = COV_CANCEL_LOC THIS.lblOptions.Caption = COV_OPTIONS_LOC THIS.chkSmartPath.Caption = COV_OPT_SMARTPATH_LOC THIS.chkRegisterAddIns.Caption = COV_OPT_REGISTER_ADDINS_LOC THIS.chkMarkAllOnLoad.Caption = COV_OPT_MARKALL_LOC THIS.lblStartMode.Caption = COV_OPT_START_IN_LOC THIS.opgStartMode.Buttons(1).Caption = COV_OPT_START_COVERAGE_LOC THIS.opgStartMode.Buttons(2).Caption = COV_OPT_START_PROFILE_LOC THIS.lblEnvironment.Caption = COV_OPT_ENVIRONMENT_LOC THIS.opgFrame.Buttons(1).Caption = COV_OPT_COVFRAME_LOC THIS.opgFrame.Buttons(2).Caption = COV_OPT_VFPFRAME_LOC THIS.lblCoverageMarks.Caption = COV_OPT_COVERAGE_MARKS_LOC THIS.lblExecuted.Caption = COV_OPT_MARK_EXECUTED_LOC THIS.lblNotExecuted.Caption = COV_OPT_MARK_NOT_EXECUTED_LOC THIS.lblMarksMatched.Caption = COV_OPT_MARKS_WILL_BE_MATCHED_LOC THIS.lblFonts.Caption = COV_OPT_FONTS_LOC THIS.cmdBaseFont.Caption = COV_OPT_GETFONT_LOC THIS.cmdFixedFont.Caption = COV_OPT_GETFIXEDFONT_LOC THIS.lblStack.Caption = COV_OPT_STACK_LOC THIS.chkExtendedStackXML.Caption = COV_OPT_STACK_EXTENDED_LOC THIS.cmdStackXSLT.Caption = COV_OPT_STACK_XSLT_LOC THIS.chkRegisterDefaults.Caption = COV_OPT_SET_DEFAULTS_LOC IF NOT THIS.oCoverageEngine.lUsingRegistry THIS.chkRegisterDefaults.Enabled = .F. THIS.chkRegisterAddIns.Enabled = .F. ENDIF *&* IF NOT THIS.oCoverageEngine.lUsingOCXs *&* THIS.DisableFontSettingButtons() *&* ENDIF lReturn = THIS.GetOptions() ENDIF RETURN lReturn AND NOT THIS.lError ENDPROC PROCEDURE cmdOK.Click WITH THISFORM .SetOptions() IF .oCoverageEngine.lUsingRegistry * this happens whether we're Setting As Default * or not, because it doesn't make any sense outside * of Startup, it can't be changed during the * life of the Coverage object .oCoverageEngine.SetRegistryKeyValue("CoverageFrame", (.opgFrame.Value = 1)) IF .chkRegisterDefaults.Enabled AND ; .chkRegisterDefaults.Value .oCoverageEngine.SaveOptionsToRegistry() ENDIF ENDIF ENDWITH THISFORM.oCoverageEngine = .NULL. THISFORM.Release() ENDPROC )PROCEDURE loadregfuncs * Loads funtions needed for Registry LOCAL nHKey,cSubKey,nResult LOCAL hKey,iValue,lpszValue,lpcchValue,lpdwType,lpbData,lpcbData LOCAL lpcStr,lpszVal,nLen,lpdwReserved LOCAL lpszValueName,dwReserved,fdwType LOCAL iSubKey,lpszName,cchName IF THIS.lLoadedDLLs RETURN ERROR_SUCCESS ENDIF DECLARE Integer RegOpenKey IN Win32API ; Integer nHKey, String @cSubKey, Integer @nResult IF THIS.lError && error loading library RETURN -1 ENDIF DECLARE Integer RegCreateKey IN Win32API ; Integer nHKey, String @cSubKey, Integer @nResult DECLARE Integer RegDeleteKey IN Win32API ; Integer nHKey, String @cSubKey DECLARE Integer RegDeleteValue IN Win32API ; Integer nHKey, String cSubKey DECLARE Integer RegCloseKey IN Win32API ; Integer nHKey DECLARE Integer RegSetValueEx IN Win32API ; Integer hKey, String lpszValueName, Integer dwReserved,; Integer fdwType, String lpbData, Integer cbData DECLARE Integer RegQueryValueEx IN Win32API ; Integer nHKey, String lpszValueName, Integer dwReserved,; Integer @lpdwType, String @lpbData, Integer @lpcbData DECLARE Integer RegEnumKey IN Win32API ; Integer nHKey,Integer iSubKey, String @lpszName, Integer @cchName DECLARE Integer RegEnumKeyEx IN Win32API ; Integer nHKey,Integer iSubKey, String @lpszName, Integer @cchName,; Integer dwReserved,String @lpszName, Integer @cchName,String @cchName DECLARE Integer RegEnumValue IN Win32API ; Integer hKey, Integer iValue, String @lpszValue, ; Integer @lpcchValue, Integer lpdwReserved, Integer @lpdwType, ; String @lpbData, Integer @lpcbData THIS.lLoadedDLLs = .T. * Need error check here RETURN ERROR_SUCCESS ENDPROC PROCEDURE openkey * Opens a registry key LPARAMETER cLookUpKey,nRegKey,lCreateKey LOCAL nSubKey,nErrCode,nPCount,lSaveCreateKey nSubKey = 0 nPCount = PARAMETERS() IF TYPE("m.nRegKey") # "N" OR EMPTY(m.nRegKey) *&* m.nRegKey = HKEY_CLASSES_ROOT m.nRegKey = THIS.nUserKey ENDIF * Load API functions nErrCode = THIS.loadregfuncs() IF m.nErrCode # ERROR_SUCCESS RETURN m.nErrCode ENDIF lSaveCreateKey = THIS.lCreateKey IF m.nPCount>2 AND TYPE("m.lCreateKey") = "L" THIS.lCreateKey = m.lCreateKey ENDIF IF THIS.lCreateKey * Try to open or create registry key nErrCode = RegCreateKey(m.nRegKey,m.cLookUpKey,@nSubKey) ELSE * Try to open registry key nErrCode = RegOpenKey(m.nRegKey,m.cLookUpKey,@nSubKey) ENDIF THIS.lCreateKey = m.lSaveCreateKey IF nErrCode # ERROR_SUCCESS RETURN m.nErrCode ENDIF THIS.nCurrentKey = m.nSubKey RETURN ERROR_SUCCESS ENDPROC PROCEDURE closekey * Closes a registry key =RegCloseKey(THIS.nCurrentKey) THIS.nCurrentKey =0 RETURN NOT THIS.lError ENDPROC PROCEDURE setregkey * This routine sets a registry key setting * ex. THIS.SetRegKey("ResWidth","640",; * "Software\Microsoft\VisualFoxPro\4.0\Options",; * HKEY_CURRENT_USER) LPARAMETER cOptName,cOptVal,cKeyPath,nUserKey LOCAL iPos,cOptKey,cOption,nErrNum iPos = 0 cOption = "" nErrNum = ERROR_SUCCESS * Open registry key m.nErrNum = THIS.OpenKey(m.cKeyPath,m.nUserKey,THIS.lCreateKeyOnSet) IF m.nErrNum # ERROR_SUCCESS RETURN m.nErrNum ENDIF * Set Key value nErrNum = THIS.SetKeyValue(m.cOptName,m.cOptVal) * Close registry key THIS.CloseKey() &&close key RETURN m.nErrNum ENDPROC PROCEDURE getregkey * This routine gets a registry key setting * ex. THIS.GetRegKey("ResWidth",@cValue,; * "Software\Microsoft\VisualFoxPro\4.0\Options",; * HKEY_CURRENT_USER) LPARAMETER cOptName,cOptVal,cKeyPath,nUserKey LOCAL iPos,cOptKey,cOption,nErrNum iPos = 0 cOption = "" nErrNum = ERROR_SUCCESS * Open registry key m.nErrNum = THIS.OpenKey(m.cKeyPath,m.nUserKey) IF m.nErrNum # ERROR_SUCCESS RETURN m.nErrNum ENDIF * Get the key value nErrNum = THIS.GetKeyValue(cOptName,@cOptVal) * Close registry key THIS.CloseKey() &&close key RETURN m.nErrNum ENDPROC PROCEDURE getkeyvalue * Obtains a value from a registry key * Note: this routine only handles Data strings (REG_SZ) LPARAMETER cValueName,cKeyValue LOCAL lpdwReserved,lpdwType,lpbData,lpcbData,nErrCode STORE 0 TO lpdwReserved,lpdwType STORE SPACE(256) TO lpbData STORE LEN(m.lpbData) TO m.lpcbData DO CASE CASE TYPE("THIS.nCurrentKey")#'N' OR THIS.nCurrentKey = 0 RETURN ERROR_BADKEY CASE TYPE("m.cValueName") #"C" RETURN ERROR_BADPARM ENDCASE m.nErrCode=RegQueryValueEx(THIS.nCurrentKey,m.cValueName,; m.lpdwReserved,@lpdwType,@lpbData,@lpcbData) * Check for error IF m.nErrCode # ERROR_SUCCESS RETURN m.nErrCode ENDIF * Make sure we have a data string data type IF lpdwType # REG_SZ RETURN ERROR_NONSTR_DATA ENDIF m.cKeyValue = Left(m.lpbData,m.lpcbData-1) RETURN ERROR_SUCCESS ENDPROC PROCEDURE setkeyvalue * This routine sets a key value * Note: this routine only handles data strings (REG_SZ) LPARAMETER cValueName,cValue LOCAL nValueSize,nErrCode DO CASE CASE TYPE("THIS.nCurrentKey")#'N' OR THIS.nCurrentKey = 0 RETURN ERROR_BADKEY CASE TYPE("m.cValueName") #"C" OR TYPE("m.cValue")#"C" RETURN ERROR_BADPARM CASE EMPTY(m.cValueName) OR (LEN(m.cValue) = 0) && used to be EMPTY(cValue) RETURN ERROR_BADPARM ENDCASE * Make sure we null terminate this guy cValue = m.cValue+CHR(0) nValueSize = LEN(m.cValue) * Set the key value here m.nErrCode = RegSetValueEx(THIS.nCurrentKey,m.cValueName,0,; REG_SZ,m.cValue,m.nValueSize) * Check for error IF m.nErrCode # ERROR_SUCCESS RETURN m.nErrCode ENDIF RETURN ERROR_SUCCESS ENDPROC PROCEDURE deletekey * This routine deletes a Registry Key LPARAMETER nUserKey,cKeyPath LOCAL nErrNum nErrNum = ERROR_SUCCESS * Delete key m.nErrNum = RegDeleteKey(m.nUserKey,m.cKeyPath) RETURN m.nErrNum ENDPROC PROCEDURE enumoptions * Enumerates through all entries for a key and populates array LPARAMETER aRegOpts,cOptPath,nUserKey,lEnumKeys LOCAL iPos,cOptKey,cOption,nErrNum iPos = 0 cOption = "" nErrNum = ERROR_SUCCESS IF PARAMETERS()<4 OR TYPE("m.lEnumKeys") # "L" lEnumKeys = .F. ENDIF * Open key m.nErrNum = THIS.OpenKey(m.cOptPath,m.nUserKey) IF m.nErrNum # ERROR_SUCCESS RETURN m.nErrNum ENDIF * Enumerate through keys IF m.lEnumKeys * Enumerate and get key names nErrNum = THIS.EnumKeys(@aRegOpts) ELSE * Enumerate and get all key values nErrNum = THIS.EnumKeyValues(@aRegOpts) ENDIF * Close key THIS.CloseKey() &&close key RETURN m.nErrNum ENDPROC PROCEDURE iskey * Checks to see if a key exists LPARAMETER cKeyName,nRegKey * Open extension key nErrNum = THIS.OpenKey(m.cKeyName,m.nRegKey) IF m.nErrNum = ERROR_SUCCESS * Close extension key THIS.CloseKey() ENDIF RETURN m.nErrNum = ERROR_SUCCESS ENDPROC PROCEDURE enumkeys LPARAMETERS aKeyNames LOCAL nKeyEntry,cNewKey,cNewSize,cbuf,nbuflen,cRetTime nKeyEntry = 0 DIMENSION aKeyNames[1] DO WHILE .T. nKeySize = 0 cNewKey = SPACE(100) nKeySize = LEN(m.cNewKey) cbuf=SPACE(100) nbuflen=LEN(m.cbuf) cRetTime=SPACE(100) m.nErrCode = RegEnumKeyEx(THIS.nCurrentKey,m.nKeyEntry,@cNewKey,@nKeySize,0,@cbuf,@nbuflen,@cRetTime) DO CASE CASE m.nErrCode = ERROR_EOF EXIT CASE m.nErrCode # ERROR_SUCCESS EXIT ENDCASE cNewKey = ALLTRIM(m.cNewKey) cNewKey = Left(m.cNewKey,LEN(m.cNewKey)-1) IF !EMPTY(aKeyNames[1]) DIMENSION aKeyNames[ALEN(aKeyNames)+1] ENDIF aKeyNames[ALEN(aKeyNames)] = m.cNewKey nKeyEntry = m.nKeyEntry + 1 ENDDO IF m.nErrCode = ERROR_EOF AND m.nKeyEntry # 0 m.nErrCode = ERROR_SUCCESS ENDIF RETURN m.nErrCode ENDPROC PROCEDURE enumkeyvalues * enumerates through values of a registry key LPARAMETER aKeyValues LOCAL lpszValue,lpcchValue,lpdwReserved LOCAL lpdwType,lpbData,lpcbData LOCAL nErrCode,nKeyEntry,lArrayPassed STORE 0 TO nKeyEntry IF TYPE("THIS.nCurrentKey")#'N' OR THIS.nCurrentKey = 0 RETURN ERROR_BADKEY ENDIF * Sorry, Win32s does not support this one! IF THIS.nCurrentOS = OS_W32S RETURN ERROR_BADPLAT ENDIF DO WHILE .T. STORE 0 TO lpdwReserved,lpdwType,nErrCode STORE SPACE(256) TO lpbData, lpszValue STORE LEN(lpbData) TO m.lpcchValue STORE LEN(lpszValue) TO m.lpcbData nErrCode=RegEnumValue(THIS.nCurrentKey,m.nKeyEntry,@lpszValue,; @lpcchValue,m.lpdwReserved,@lpdwType,@lpbData,@lpcbData) DO CASE CASE m.nErrCode = ERROR_EOF EXIT CASE m.nErrCode # ERROR_SUCCESS EXIT ENDCASE nKeyEntry = m.nKeyEntry + 1 * Set array values DIMENSION aKeyValues[m.nKeyEntry,2] aKeyValues[m.nKeyEntry,1] = Left(m.lpszValue,m.lpcchValue) DO CASE CASE lpdwType = REG_SZ aKeyValues[m.nKeyEntry,2] = Left(m.lpbData,m.lpcbData-1) CASE lpdwType = REG_BINARY * Don't support binary aKeyValues[m.nKeyEntry,2] = REG_BINARY_LOC CASE lpdwType = REG_DWORD * You will need to use ASC() to check values here. aKeyValues[m.nKeyEntry,2] = Left(m.lpbData,m.lpcbData-1) OTHERWISE aKeyValues[m.nKeyEntry,2] = REG_UNKNOWN_LOC ENDCASE ENDDO IF m.nErrCode = ERROR_EOF AND m.nKeyEntry # 0 m.nErrCode = ERROR_SUCCESS ENDIF RETURN m.nErrCode ENDPROC PROCEDURE Init THIS.nUserKey = HKEY_CURRENT_USER DO CASE CASE _DOS OR _UNIX OR _MAC OR ; ATC("Windows 3",OS(1)) # 0 RETURN .F. CASE ATC("Windows NT",OS(1)) # 0 THIS.nCurrentOS = OS_NT THIS.cRegDLLFile = DLL_ADVAPI_NT OTHERWISE * Windows 95 THIS.nCurrentOS = OS_WIN95 THIS.cRegDLLFile = DLL_ADVAPI_WIN95 ENDCASE RETURN NOT THIS.lError ENDPROC %PROCEDURE setinitialcontrolproperties STORE THIS.nMargin TO ; THIS.edtCode.Left, ; THIS.lstAvailableObjectsAndProcs.Left, ; THIS.cntTools.Left WITH THIS.lstAvailableObjectsAndProcs STORE THIS.nMargin+THIS.cntTools.Height TO ; .Top STORE THIS.WIDTH - (THIS.nMargin*2) TO ; THIS.edtCode.Width, ; .Width ENDWITH WITH THIS.shpSplitter .Left = -THIS.nMargin .Width = THIS.Width + (THIS.nMargin * 2) ENDWITH STORE THIS.WIDTH + (THIS.nMargin*2) TO THIS.shpSplitter.WIDTH STORE THIS.shpSplitter.Top TO THIS.nLastSplitterPosition THIS.AdjustListColumnWidths() ENDPROC PROCEDURE setinitialformproperties WITH THIS .MaxHeight = SYSMETRIC(2) - .nMargin .MaxWidth = SYSMETRIC(1) - .nMargin IF THIS.Parent.lInCoverageFrame .WIDTH = MIN(.MaxWidth, ; THIS.Parent.oFrame.WIDTH - (SYSMETRIC(3)*2)) .Height = MIN(.MaxHeight, ; THIS.Parent.oFrame.Height * .5) .Left = SYSMETRIC(3) .Top = SYSMETRIC(9) ELSE .WIDTH = MIN(.MaxWidth, _SCREEN.WIDTH * .5) .Height = MIN(.MaxHeight,_SCREEN.Height * .5) ENDIF ENDWITH RETURN NOT THIS.lError ENDPROC PROCEDURE respondtosplitter LPARAMETERS nYCoord LOCAL lnHighestAllowable lnHighestAllowable = (THIS.nListRowHeight * 1.5) ; + THIS.lstAvailableObjectsAndProcs.Top DO CASE CASE nYCoord < lnHighestAllowable * too high THIS.shpSplitter.Top = lnHighestAllowable CASE BETWEEN(nYCoord, lnHighestAllowable,THIS.Height-THIS.nMargin) * we're okay THIS.shpSplitter.Top = nYCoord OTHERWISE * too low THIS.shpSplitter.Top = (THIS.Height - THIS.nMargin) ENDCASE THIS.SynchSizes() RETURN NOT THIS.lError ENDPROC PROCEDURE togglepreviewzoommode THIS.lInZoomMode = ! THIS.lInZoomMode IF THIS.lInZoomMode THIS.RespondToSplitter(THIS.Height - THIS.nMargin) ELSE IF THIS.nLastSplitterPosition >= THIS.Height-THIS.nMargin THIS.nLastSplitterPosition = (THIS.lstAvailableObjectsandProcs.Top + ; THIS.lstAvailableObjectsandProcs.Height) - ; THIS.nMargin ENDIF THIS.RespondToSplitter(THIS.nLastSplitterPosition) IF THIS.edtCode.Height < THIS.lstAvailableObjectsandProcs.Height THIS.Height = THIS.edtCode.Top + ; THIS.lstAvailableObjectsandProcs.Height + ; THIS.nMargin ENDIF ENDIF * THISFORMSET.SynchZoomWindowState() * the above is going to be called by synchsizes, * from RespondToSplitter, at all times RETURN NOT THIS.lError ENDPROC PROCEDURE adjustlistcolumnwidths LPARAMETERS nLeftColumnWidth IF TYPE("nLeftColumnWidth") = "N" THIS.iLeftListColWidth = nLeftColumnWidth ENDIF WITH THIS.lstAvailableObjectsAndProcs .ColumnWidths = ; ALLTR(STR(THIS.iLeftListColWidth))+","+ ; ALLTR(STR(.WIDTH - THIS.iLeftListColWidth)) ENDWITH ENDPROC PROCEDURE addtool LPARAMETERS tcClass ASSERT TYPE("tcClass") = "C" LOCAL cName cName = "tool"+SYS(2015) THIS.cntTools.AddObject(cName,tcClass) IF TYPE("THIS.cntTools."+cName+".Name") = "C" STORE .T. TO ("THIS.cntTools."+cName+".Visible") THIS.cntTools.SynchSizes() ENDIF RETURN (NOT THIS.lError) ENDPROC PROCEDURE setlistrowheight WITH THIS.lstAvailableObjectsandProcs THIS.nListRowHeight = FONTM(1,.FontName,.FontSize) + ; FONTM(5,.FontName,.FontSize) + ; FONTM(4,.FontName,.FontSize) ENDWITH ENDPROC PROCEDURE RightClick THISFORMSET.StandardRightClick() ENDPROC PROCEDURE synchsizes * make sure that the list hasn't gotten too * large for the number of items in it * because the part under the real items is * difficult to manage (can't get mouseclicks etc) LOCAL lnMaxListHeight, lnProposedListHeight,lnMinimumListHeight , liCount IF THIS.nListRowHeight = 0 THIS.SetListRowHeight() ENDIF IF THIS.Parent.iTargetReccount < 1 THIS.Parent.iTargetReccount = 1 ENDIF THIS.lInZoomMode = ( THIS.shpSplitter.Top >= ; (THIS.Height - THIS.nMargin) ) WITH THIS.lstAvailableObjectsAndProcs * this property can change as the font does... DO CASE CASE TYPE("THIS.Parent.iTargetReccount") = "N" liCount = THIS.Parent.iTargetReccount CASE USED(THIS.Parent.cTargetAlias) liCount = RECCOUNT(THIS.Parent.cTargetAlias) OTHERWISE liCount = .ListCount ENDCASE lnMinimumListHeight = THIS.nListRowHeight * 1.5 THIS.Height = MAX(THIS.Height, ; (lnMinimumListHeight + .Top + THIS.nMargin + 2)) lnMaxListHeight = MAX(MAX(liCount,1) * THIS.nListRowHeight,lnMinimumListHeight) *&* start out not wanting to *&* disturb the user's current listheight *&* settings: lnProposedListHeight = THIS.shpSplitter.Top - .Top IF liCount > 1 AND ; (lnProposedListHeight <= lnMinimumListHeight) *&* we've just loaded a log and *&* the last log was very short *&* so let's make sure we *&* can display at least 2 lines and *&* hopefully the scrollbar lnProposedListHeight = MIN(liCount,3) * THIS.nListRowHeight ENDIF DO CASE CASE liCount < 2 .Height = lnMinimumListHeight CASE lnProposedListHeight < lnMinimumListHeight OR ; lnProposedListHeight > lnMaxListHeight *&* average the available values and *&* try to come out with something reasonable .Height = (lnMinimumListHeight+lnMaxListHeight)/2 OTHERWISE .Height = lnProposedListHeight ENDCASE THIS.shpSplitter.Top = .Height + .Top ENDWITH * ENDDOUG_ER THIS.edtCode.Visible = (NOT THIS.lInZoomMode) IF THIS.lInZoomMode THIS.shpSplitter.MousePointer = MOUSEPOINTER_ARROW_UP THIS.Height = THIS.shpSplitter.Top + THIS.nMargin ELSE THIS.nLastSplitterPosition = THIS.shpSplitter.Top THIS.edtCode.Top = ; THIS.lstAvailableObjectsAndProcs.Top+ ; THIS.lstAvailableObjectsAndProcs.Height+ ; THIS.nMargin THIS.edtCode.Height = MAX(THIS.nMargin/2, ; THIS.Height -(THIS.edtCode.Top+THIS.nMargin)) IF THIS.edtCode.Height < THIS.lstAvailableObjectsandProcs.Height THIS.Height = THIS.edtCode.Top + ; THIS.lstAvailableObjectsandProcs.Height + ; THIS.nMargin THIS.edtCode.Height = THIS.lstAvailableObjectsandProcs.Height ENDIF THIS.shpSplitter.MousePointer = MOUSEPOINTER_SIZE_NS ENDIF THIS.cntTools.opgPreviewZoomMode.Value = IIF(THIS.lInZoomMode,2,1) THISFORMSET.SynchZoomWindowState() RETURN NOT THIS.lError ENDPROC PROCEDURE DragDrop LPARAMETERS oSource, nXCoord, nYCoord IF nYCoord > (THIS.Height - THIS.nMargin) THISFORM.RespondToSplitter(nYCoord) ENDIF RETURN NOT THIS.lError ENDPROC PROCEDURE Init LOCAL ARRAY aTemp[1] ASSERT TYPE("THISFORMSET") = "O" AND ; AMEMBERS(aTemp,THISFORMSET,1) > 0 ; AND ASCAN(aTemp,"LIGNORECOVERAGEFILENAMES") > 0 LOCAL lReturn, irow, icol * this is to avoid showing the splitter-mouse-pointer * during start up irow = MROW("",3) icol = MCOL("",3) MOUSE AT 0,0 PIXELS WINDOW (_SCREEN.Name) lReturn = DODEFAULT() IF lReturn THIS.SetInitialFormProperties() THIS.SetInitialControlProperties() ENDIF MOUSE AT irow,icol PIXELS WINDOW (_SCREEN.Name) RETURN lReturn AND NOT THIS.lError ENDPROC PROCEDURE Resize DODEFAULT() IF THIS.cntTools.ControlCount # THIS.nToolCount THIS.cntTools.SynchSizes() THIS.nToolCount = THIS.cnTools.ControlCount ENDIF STORE THIS.WIDTH - (THIS.nMargin*2) TO ; THIS.edtCode.WIDTH, ; THIS.lstAvailableObjectsAndProcs.WIDTH THIS.AdjustListColumnWidths() THIS.shpSplitter.WIDTH = THIS.WIDTH+(THIS.nMargin*2) IF THIS.nLastSplitterPosition > ; (THIS.Height - THIS.nMargin) THIS.nLastSplitterPosition = ; (THIS.Height - (THIS.nMargin * 2)) ENDIF THIS.RespondToSplitter(THIS.shpSplitter.Top) RETURN NOT THIS.lError ENDPROC PROCEDURE Error LPARAMETERS nError, cMethod, nLine DODEFAULT(nError,cMethod,nLine) ENDPROC PROCEDURE AddObject LPARAMETERS cName, cClass LOCAL nWidth, nHeight IF DODEFAULT(cName,cClass) nWidth = EVAL("THIS."+cName+".Width") + ; EVAL("THIS."+cName+".Left") nHeight = EVAL("THIS."+cName+".Top") + ; EVAL("THIS."+cName+".Height") THIS.MinWidth = MAX(nWidth,THIS.MinWidth) ENDIF NODEFAULT RETURN NOT THIS.lError ENDPROC PROCEDURE KeyPress LPARAMETERS nKeyCode, nShiftAltCtrl IF nKeyCode = 93 THISFORMSET.StandardRightClick() NODEFAULT ENDIF ENDPROC PROCEDURE fieldtosearch LPARAMETERS tcWhichField, tlSearchThisField LOCAL lcWhichField lcWhichField = "[|]+"+ALLTR(UPPER(tcWhichField))+"+[|]" IF tlSearchThisField * add it to the expression, which, when EVAL()'d, * creates a string of the values *contained* all * fields in the list delimited with "|" chars DO CASE CASE EMPTY(THIS.cFieldsToSearch) THIS.cFieldsToSearch = lcWhichField CASE ATC(lcWhichField,THIS.cFieldsToSearch) = 0 THIS.cFieldsToSearch = ; THIS.cFieldsToSearch+"+"+lcWhichField OTHERWISE * it's already there ENDCASE ELSE * subtract it from the expression IF NOT EMPTY(THIS.cFieldsToSearch) THIS.cFieldsToSearch = ; STRTRAN(THIS.cFieldsToSearch,lcWhichField,"") ENDIF * trim the expression after removing part of * its contents and get rid of any dreck THIS.cFieldsToSearch = ALLTR(THIS.cFieldsToSearch) * if we've taken out the middle one, this could happen: THIS.cFieldsToSearch = STRTRAN(THIS.cFieldsToSearch,"++","+") DO WHILE LEFT(THIS.cFieldsToSearch,1) = "+" THIS.cFieldsToSearch = SUBSTR(THIS.cFieldsToSearch,2) ENDDO DO WHILE RIGHT(THIS.cFieldsToSearch,1) = "+" THIS.cFieldsToSearch = ; LEFT(THIS.cFieldsToSearch,LEN(THIS.cFieldsToSearch)-1) ENDDO ENDIF THIS.CheckFindButton(.T.) ENDPROC PROCEDURE checkfindbutton LPARAMETERS tlNewSearch IF tlNewSearch THIS.cmdOK.Caption = COV_FIND_FIND_LOC ENDIF * we need an expression to search in * and a value to look for, before * we can Find anything: THIS.cmdOK.Enabled = ; (NOT (EMPTY(THIS.txtSearch.Value) OR ; EMPTY(THIS.cFieldsToSearch)) ) ENDPROC PROCEDURE find WITH THISFORMSET LOCAL lcAlias, liSelect, liRec, ; lcLocateCriterion, llFindAgain, llInSource lcAlias = .cTargetAlias * note that this can change * over the (modeless) life * of this Find form, * so we retrieve it each time we need it, * we don't store it liSelect = SELECT() liRec = RECNO(lcAlias) SELECT (lcAlias) llFindAgain = THIS.InFindAgainState() IF llFindAgain AND THIS.chkSourceCode.Value ; AND .ShowTargetText(ALLTR(THIS.txtSearch.Value),THIS.chkMatchCase.Value, .T.) * show it again in the current record ELSE IF llFindAgain SKIP ENDIF DO CASE CASE UPPER(ALLTR(THIS.txtSearch.Value)) == ; UPPER(COV_FULL_SOURCE_FILE_LOC) lcLocateCriterion = "EMPTY(ObjClass)" CASE THIS.chkMatchCase.Value lcLocateCriterion = ; "AT(ALLTR(THIS.txtSearch.Value), "+; "EVAL(THIS.cFieldsToSearch)) > 0" OTHERWISE lcLocateCriterion = ; "ATC(ALLTR(THIS.txtSearch.Value), "+ ; "EVAL(THIS.cFieldsToSearch)) > 0" ENDCASE LOCATE REST FOR &lcLocateCriterion IF THIS.chkWrapAround.Value AND EOF() GO TOP LOCATE REST FOR &lcLocateCriterion * because a CONTINUE didn't work ENDIF IF FOUND() AND ; (RECNO() # liRec OR (NOT llFindAgain)) THIS.cmdOK.Caption = COV_FIND_FINDNEXT_LOC .frmMainDialog.Show() DO CASE CASE THIS.chkClasses.Value AND ; ((THIS.chkMatchCase.Value AND ; AT(ALLTR(THIS.txtSearch.Value),ObjClass)>0) OR ; (ATC(ALLTR(THIS.txtSearch.Value),ObjClass)>0)) * found in the classnames CASE THIS.chkFileNames.Value AND ; ((THIS.chkMatchCase.Value AND ; AT(ALLTR(THIS.txtSearch.Value),HostFile)>0) OR ; (ATC(ALLTR(THIS.txtSearch.Value),HostFile)>0)) * found in the filenames OTHERWISE * it's in the source code llInSource = .T. ENDCASE .SetTargetRow(RECNO()) .NotifyTargetRecordChanged() IF llInSource .ShowTargetText(ALLTR(THIS.txtSearch.Value), THIS.chkMatchCase.Value) ELSE THIS.Show() ENDIF ELSE GO liRec WAIT WINDOW NOWAIT COV_FIND_NOTFOUND_LOC ?? CHR(7) THIS.cmdOK.Caption = COV_FIND_FIND_LOC ENDIF ENDIF SELECT (liSelect) ENDWITH ENDPROC PROCEDURE infindagainstate RETURN (STRTRAN(COV_FIND_FINDNEXT_LOC,"\<","") $ STRTRAN(THIS.cmdOK.Caption,"\<","")) ENDPROC PROCEDURE Init DO CASE CASE TYPE("THISFORMSET.cBaseMonoFontName") # "C" RETURN .F. * this is only meant to be called * as a child form of the coverage set CASE DODEFAULT(THISFORMSET) THIS.oCoverageEngine = THISFORMSET * THIS.txtSearch.FontName = THISFORMSET.cBaseMonoFontName THIS.chkSourceCode.Value = .T. THIS.chkClasses.Value = .T. THIS.chkFilenames.Value = .T. THIS.CheckFindButton(.T.) IF THISFORMSET.lInCoverageFrame ACTI WINDOW (THISFORMSET.oFrame.Name) SAME ENDIF OTHERWISE RETURN .F. ENDCASE ENDPROC PROCEDURE cmdOK.Click THISFORM.Find() THIS.Default = .T. * otherwise it seems to lose the attribute ENDPROC ePROCEDURE notifyzoomwindowclosed IF TYPE("THIS.frmMainDialog.Class") = "C" LOCAL cTarget cTarget = THIS.GetAlias(, "Target") * it's possible that we're on our way out at this point * and have just closed the zoom window, triggering this notification IF USED(cTarget) THIS.frmMainDialog.TogglePreviewZoomMode() IF NOT EOF(cTarget) GO RECNO() IN (cTarget) ENDIF THIS.NotifyTargetRecordChanged() ENDIF ENDIF ENDPROC PROCEDURE synchzoomwindowstate DO CASE CASE TYPE("THIS.frmZoom.BaseClass") # "C" * we may be starting up and the window * is not yet available CASE (NOT THIS.frmMainDialog.lInZoomMode) AND ; THIS.frmZoom.Visible THIS.frmZoom.Hide() CASE THIS.frmMainDialog.lInZoomMode AND ; (NOT THIS.frmZoom.Visible) IF THIS.frmMainDialog.WindowState = 2 THIS.frmMainDialog.WindowState = 0 ENDIF IF NOT THIS.frmMainDialog.Visible THIS.frmMainDialog.Show() ENDIF WITH THIS.frmZoom IF BETWEEN(.Top, ; THIS.frmMainDialog.Top, ; THIS.frmMainDialog.Top+THIS.frmMainDialog.Height) OR ; BETWEEN(.Left, ; THIS.frmMainDialog.Left, ; THIS.frmMainDialog.Left+THIS.frmMainDialog.WIDTH) .Top = THIS.frmMainDialog.Top + ; THIS.frmMainDialog.Height + ; SYSMETRIC(9) + SYSMETRIC(20) .Left = THIS.frmMainDialog.Left ENDIF ENDWITH THIS.frmZoom.Show() OTHERWISE * nothing to do here as currently designed ENDCASE RETURN NOT THIS.lError ENDPROC PROCEDURE notifytargetrecordchanged LOCAL cTarget, lNoCodeYet, cCaption cTarget = THIS.GetAlias(,"Target") IF NOT USED(cTarget) * on our way in or out RETURN ENDIF IF THIS.lInProfileMode lNoCodeYet = EMPTY(&cTarget..Profiled) ELSE lNoCodeYet = EMPTY(&cTarget..Marked) ENDIF IF lNoCodeYet AND ; THIS.frmMainDialog.lInZoomMode AND ; THIS.lFastZoomMode *&* could do a windowstate check in here also... ELSE lNoCodeYet = (NOT THIS.MarkOneTargetRecord()) ENDIF IF THIS.frmMainDialog.lInZoomMode cCaption = ALLTR(&cTarget..ObjClass) IF EMPTY(cCaption) cCaption = COV_FULL_SOURCE_FILE_LOC ELSE IF "!" $ cCaption cCaption = SUBSTR(cCaption,AT("!",cCaption)+1) ENDIF ENDIF WITH THIS.frmZoom IF lNoCodeYet .Caption = COV_ZOOM_GET_CODE_LOC ELSE .Caption = COV_ZOOM_MARKED_CODE_FOR_LOC+ ; +" "+ALLTR(&cTarget..Hostfile)+ ; ": "+cCaption ENDIF .edtCode.SelStart = 0 .Refresh() *!* IF BETWEEN(.Top, ; *!* THIS.frmMainDialog.Top, ; *!* THIS.frmMainDialog.Top+THIS.frmMainDialog.Height) AND ; *!* BETWEEN(.Left, ; *!* THIS.frmMainDialog.Left, ; *!* THIS.frmMainDialog.Left+THIS.frmMainDialog.WIDTH) *!* .Top = THIS.frmMainDialog.Top - SYSMETRIC(9) *!* .Left = THIS.frmMainDialog.Left - SYSMETRIC(9) *!* ENDIF IF NOT .Visible .Visible = .T. ENDIF ENDWITH ELSE THIS.frmMainDialog.Refresh() THIS.frmMainDialog.edtCode.SelStart = 0 ENDIF RETURN NOT THIS.lError ENDPROC PROCEDURE showmodaldialog LPARAMETERS tcWhichDialogClass, tcWhichClassLib ASSERT NOT EMPTY(tcWhichDialogClass) ASSERT NOT EMPTY(tcWhichClassLib) ASSERT TYPE("tcWhichDialogClass") = "C" ASSERT TYPE("tcWhichClassLib") = "C" LOCAL oFormRef,cAlias,cLog, cLibs PUSH KEY CLEAR #IF COV_COMPILED_IN_VFP5 cLibs = SET("CLASSLIB") cAlias = THIS.SetClassLibToAlias(tcWhichClassLib,THIS.cAppName) #ENDIF IF THIS.lInCoverageFrame THIS.oFrame.Show() ELSE ACTIVATE SCREEN ENDIF #IF COV_COMPILED_IN_VFP5 oFormRef = CREATEOBJECT(cAlias+"."+tcWhichDialogClass, THIS) #ELSE oFormRef = NEWOBJECT(tcWhichDialogClass,tcWhichClassLib,THIS.cAppName,THIS) #ENDIF cLog = THIS.cSuspendedLog * avoid attempt to resume logging * during this modal dialog THIS.cSuspendedLog = "" oFormRef.Show(1) IF NOT EMPTY(cAlias) AND ; (ATC("ALIAS "+cAlias, SET("CLASSLIB")) > 0) RELEASE CLASSLIB ALIAS (cAlias) SET CLASSLIB TO &cLibs ENDIF THIS.cSuspendedLog = cLog POP KEY RETURN NOT THIS.lError ENDPROC PROCEDURE getoptionsfromuser LOCAL lReturn, lProfileMode, cMark, cMarkNot, ; cTarget, iSelect, iRecNo, lMarkAll, lAlreadyReMarked cMark = THIS.cMarkExecuted cMarkNot = THIS.cMarkNotExecuted lMarkAll = THIS.lMarkAllOnLoad lReturn = THIS.ShowModalDialog(COV_OPTIONSDIALOG, COV_OPTIONS_CLASSLIB) IF lReturn THIS.SetUiFonts() IF NOT ((cMark+cMarkNot)==(THIS.cMarkExecuted+THIS.cMarkNotExecuted)) * a change has happened THIS.SetMarks() && make them of comparable length iSelect = SELECT() cTarget = THIS.GetAlias(,"Target") SELECT (cTarget) iRecNo = RECNO() COUNT FOR NOT EMPTY(Marked) IF _TALLY > 0 IF MESSAGEBOX(COV_MARKS_CHANGED_LOC, ; COV_WARNING_YESNO_MESSAGEBOX) ; = IDNO REPLACE ALL Marked WITH "" IF THIS.lMarkAllOnLoad AND (NOT THIS.lInProfileMode) THIS.MarkAllTargetRecords() lAlreadyReMarked = .T. ENDIF ENDIF ENDIF GO iRecNo SELECT (iSelect) THIS.NotifyTargetRecordChanged() ENDIF IF (NOT lMarkAll) AND ; THIS.lMarkAllOnLoad AND ; (NOT lAlreadyReMarked) AND ; (MESSAGEBOX(COV_MARK_ALL_NOW_LOC, ; COV_WARNING_YESNO_MESSAGEBOX) ; = IDYES) THIS.MarkAllTargetRecords() THIS.NotifyTargetRecordChanged() ENDIF ENDIF RETURN lReturn AND NOT THIS.lError ENDPROC PROCEDURE showtextlog LPARAMETERS tlFromModalDialog LOCAL wOnTopWind, wSourceLog IF tlFromModalDialog wOnTopWind = WONTOP() ENDIF IF THIS.lInCoverageFrame MODI COMM (THIS.cSourceFile) NOWAIT NOEDIT IN WINDOW (THIS.oFrame.Name) ELSE MODI COMM (THIS.cSourceFile) NOWAIT NOEDIT IN SCREEN ENDIF IF NOT EMPTY(wOnTopWind) ACTIVATE WINDOW (wOnTopWind) wSourceLog = (SUBSTR(THIS.cSourceFile,RAT("\",THIS.cSourceFile)+1)) IF RIGHT(THIS.cSourceFile,1) = "." wSourceLog = LEFT(wSourceLog,LEN(wSourceLog)-1) ENDIF IF WEXIST(wSourceLog) && it should! MOVE WINDOW (wSourceLog) TO 1,1 ENDIF ENDIF ENDPROC PROCEDURE showskippedfiles LOCAL cSource,cAlias, iSelect, wOnTopWind cSource = THIS.GetAlias(,"Source") cAlias = THIS.GetAlias(,"Skipped") IF THIS.CreateSkippedCursor(cSource, cAlias) IF USED(cAlias) AND NOT EMPTY(RECC(cAlias)) iSelect = SELECT() wOnTopWind = WONTOP() SELECT (cAlias) IF THIS.lInCoverageFrame BROWSE NOWAIT IN WINDOW (THIS.oFrame.Name) TITLE cAlias ELSE BROWSE NOWAIT IN SCREEN TITLE cAlias ENDIF MOVE WINDOW (cAlias) TO 1,1 SELECT (iSelect) IF NOT EMPTY(wOnTopWind) ACTIVATE WINDOW (wOnTopWind) ENDIF ELSE MESSAGEBOX(COV_NO_LOG_ENTRIES_SKIPPED_LOC, ; 64,COV_DIALOG_CAPTION_LOC+" "+COV_INFO_LOC) ENDIF ENDIF RETURN NOT THIS.lError ENDPROC PROCEDURE arrangeframewindows IF THIS.lInCoverageFrame LOCAL wFrame, iChild, wChildWindow, nPos, nPosFoxels, ; cAlias, cSourceWind, iNumberWindows, ; wOnTopWind, wFrameTopWind, oForm, nStagger LOCAL ARRAY aWindowCollection[1] iChild = 0 wFrame = UPPER(THIS.oFrame.Name) nStagger = SYSMETRIC(9) cAlias = UPPER(THIS.GetAlias(,"Skipped")) IF NOT WVISIBLE(cAlias) cAlias = "" ENDIF cSourceWind = UPPER(SUBSTR(THIS.cSourceFile, RAT("\",THIS.cSourceFile)+1)) IF NOT WVISIBLE(cSourceWind) cSourceWind = "" ENDIF wOnTopWind = UPPER(WONTOP()) iNumberWindows = 0 * first find any forms that are in this frame, * which will be in the stack before the frame: FOR EACH oForm IN _SCREEN.Forms DO CASE CASE oForm.ShowWindow = 0 OR ; (! oForm.Visible) OR ; (oForm.WindowState # 0) OR ; UPPER(oForm.BaseClass) == "TOOLBAR" * skip it CASE oForm.ShowWindow = 1 * add to the collection iNumberWindows = iNumberWindows + 1 DIME aWindowCollection[iNumberWindows] aWindowCollection[iNumberWindows] = oForm OTHERWISE && oForm.ShowWindow = 2 * is it the right frame? IF UPPER(oForm.Name) == UPPER(THIS.oFrame.Name) EXIT ELSE iNumberWindows = 0 * start again with the next batch, * in the stack, recreating the array ENDIF ENDCASE ENDFOR nPos = 0 IF NOT EMPTY(cAlias) IF (cAlias == wOnTopWind) wFrameTopWind = cAlias ELSE nPos = nPos + 1 ENDIF ENDIF IF NOT EMPTY(cSourceWind) IF (cSourceWind == wOnTopWind) wFrameTopWind = cSourceWind ELSE nPos = nPos + 1 ENDIF ENDIF FOR iChild = iNumberWindows TO 1 STEP -1 aWindowCollection[iChild].Left = nPos * nStagger aWindowCollection[iChild].Top = nPos * nStagger nPos = nPos + 1 ENDFOR * Now add the ones that won't show up in _SCREEN.Forms() * -- we can't depend on the stack order, * to give us these windows so unless they are WONTOP() * we have to create one arbitrarily, putting these at the back. * Skipped Files Browse: nPosFoxels = nStagger/ FONTM(1,THIS.oFrame.FontName, THIS.oFrame.FontSize) IF (NOT EMPTY(cAlias)) AND ; (NOT (cAlias == wOnTopWind)) SHOW WINDOW (cAlias) ; IN WINDOW (THIS.oFrame.Name) BOTTOM IF (NOT EMPTY(cSourceWind)) AND ; (NOT (cSourceWind == wOnTopWind)) MOVE WINDOW (cAlias) TO nPosFoxels, nPosFoxels ELSE MOVE WINDOW (cAlias) TO 0,0 ENDIF ENDIF * Text Log MODI window: IF NOT EMPTY(cSourceWind) AND ; (NOT (cSourceWind == wOnTopWind)) SHOW WINDOW (cSourceWind) ; IN WINDOW (THIS.oFrame.Name) BOTTOM MOVE WINDOW (cSourceWind) TO 0,0 ENDIF IF NOT EMPTY(wFrameTopWind) SHOW WINDOW (wFrameTopWind) ; IN WINDOW (THIS.oFrame.Name) MOVE WINDOW (wFrameTopWind) TO ; nPos * nPosFoxels, ; (nPos * nStagger)/FONTM(6,THIS.oFrame.FontName, THIS.oFrame.FontSize) ENDIF ENDIF RETURN (NOT THIS.lError) ENDPROC PROCEDURE togglefastzoommode THIS.lFastZoomMode = NOT THIS.lFastZoomMode IF NOT THIS.lFastZoomMode THIS.NotifyTargetRecordChanged() ENDIF ENDPROC PROCEDURE showfinddialog IF THIS.lInCoverageFrame THIS.oFrame.Show() ELSE ACTIVATE SCREEN ENDIF IF TYPE("THIS.frmFindDialog.BaseClass") # "C" LOCAL oFormRef,cAlias, cLibs #IF COV_COMPILED_IN_VFP5 cLibs = SET("CLASSLIB") cAlias = THIS.SetClassLibToAlias(COV_FIND_CLASSLIB ,THIS.cAppName) #ENDIF #IF COV_COMPILED_IN_VFP5 THIS.AddObject("frmFindDialog",cAlias+"."+COV_FINDDIALOG) #ELSE THIS.NewObject("frmFindDialog",COV_FINDDIALOG, COV_FIND_CLASSLIB,THIS.cAppName) #ENDIF IF NOT EMPTY(cAlias) AND ; (ATC("ALIAS "+cAlias, SET("CLASSLIB")) > 0) RELEASE CLASSLIB ALIAS (cAlias) SET CLASSLIB TO &cLibs ENDIF ENDIF IF TYPE("THIS.frmFindDialog.BaseClass") = "C" THIS.frmFindDialog.Show() ENDIF RETURN NOT THIS.lError ENDPROC PROCEDURE settargetrow LPARAMETERS tiRec, tcTargetAlias LOCAL liSelect, liRec, liValue, lcTarget, liOldRec IF EMPTY(tcTargetAlias) OR ; VARTYPE(tcTargetAlias) # "C" OR ; NOT USED(tcTargetAlias) lcTarget = UPPER(THIS.cTargetAlias) ELSE lcTarget = UPPER(tcTargetAlias) ENDIF IF NOT USED(lcTarget) * shouldn't be in here, * but theoretically this method * could be called as a refresh * at a moment that we're on our way out * (would not happen in existing code!) RETURN ENDIF IF NOT UPPER(ALIAS()) == lcTarget liSelect = SELECT() SELECT (lcTarget) ENDIF WITH THIS.frmMainDialog.lstAvailableObjectsAndProcs IF VARTYPE(tiRec) = "N" AND NOT EMPTY(tiRec) IF EOF() GO BOTTOM * can't just use RECCOUNT() because of filters ENDIF liOldRec = RECNO() LOCATE COUNT WHILE RECNO() # tiRec TO liValue * have to do this to account for * deleted or filtered records -- no other way * to get the list index or value * that does not screw up on this account IF EOF() liRec = liOldRec liValue = .Value ELSE liValue = liValue + 1 liRec = tiRec ENDIF ELSE liRec = RECNO() liValue = .Value ENDIF GO liRec .Value = liValue ENDWITH IF NOT EMPTY(liSelect) SELECT (liSelect) ENDIF ENDPROC PROCEDURE showtargettext LPARAMETERS tcText, tlCaseSensitive, tlFindAgain LOCAL liPos, loDialog, lcTextBefore, liIncident, llFound, loWonTop IF TYPE("THIS.frmMainDialog.Class") # "C" * called inappropriately RETURN .F. ENDIF IF THIS.frmMainDialog.lInZoomMode loDialog = THIS.frmZoom ELSE loDialog = THIS.frmMainDialog ENDIF IF TYPE("THIS.frmFindDialog.BaseClass") = "C" loWontop = THIS.frmFindDialog ELSE loWontop = NULL ENDIF WITH loDialog.edtCode IF tlFindAgain AND .SelStart > 0 lcTextBefore = SUBSTR(.Value,1,.SelStart+.SelLength) IF tlCaseSensitive liIncident = OCCURS(tcText,lcTextBefore)+1 ELSE liIncident = OCCURS(UPPER(tcText),UPPER(lcTextBefore))+1 ENDIF ELSE liIncident = 1 ENDIF IF VARTYPE(tcText) = "C" AND ; NOT EMPTY(tcText) IF tlCaseSensitive liPos = AT(tcText,.Value,liIncident) ELSE liPos = ATC(tcText,.Value, liIncident) ENDIF ENDIF IF NOT EMPTY(liPos) llFound = .T. .SelStart = liPos-1 .SelLength = LEN(tcText) .SetFocus() IF (NOT ISNULL(loWonTop)) WITH .Parent IF BETWEEN(loWonTop.Top, ; .Top, .Top+.Height) loWonTop.Top = .Top+.Height ENDIF ENDWITH ENDIF ELSE .SelStart = 0 .SelLength = 0 ENDIF ENDWITH RETURN llFound AND (NOT THIS.lError) ENDPROC PROCEDURE setuioptions IF DODEFAULT() LOCAL llZoom llZoom = ; THIS.GetRegistryKeyValue("ZoomMode",THIS.frmMainDialog.lInZoomMode) IF llZoom # THIS.frmMainDialog.lInZoomMode THIS.frmMainDialog.TogglePreviewZoomMode() ENDIF THIS.frmMainDialog.Resize() THIS.frmZoom.Resize() ELSE RETURN .F. ENDIF ENDPROC PROCEDURE standardrightclick SET TOPIC ID TO 1895825783 DO COVSHORT.MPR SET TOPIC ID TO RELEASE POPUP COVSHORT ENDPROC PROCEDURE showprojectstatistics LPARAMETERS tcSource, tcTarget, tcProject LOCAL iRecNo, cTarget cTarget = THIS.GetAlias(tcTarget,"Target") iRecNo = RECNO(cTarget) DODEFAULT(tcSource, tcTarget, tcProject) GO iRecNo IN (cTarget) IF NOT THIS.lError THIS.NotifyTargetRecordChanged() ENDIF ENDPROC PROCEDURE displayprojectstatistics LPARAMETERS tcSource, tcTarget, tcProject LOCAL cProject, iSelect, iState, wOnTopWind, cClauses, oForm cProject = THIS.GetAlias(tcProject, "Project") IF DODEFAULT(tcSource, tcTarget, tcProject) IF EMPTY(THIS.cProjectFRX) OR (NOT FILE(THIS.cProjectFRX)) THIS.cProjectFRX = COV_PROJECT_FRX && will be built into the APP ENDIF oForm = CREATEOBJECT("FORM") oForm.Caption = COV_APPLICATION_NAME_LOC + ; COV_STATS_VIEW_PROJECT_LOC * because I am re-using a LOC from * a button which may have a hotkey: oForm.Caption = STRTRAN(oForm.Caption,"\<","") iSelect = SELECT() SELECT (cProject) wOnTopWind = WONTOP() IF THIS.lVFP5 iState = _SCREEN.WindowState _SCREEN.WindowState = 2 ACTIVATE SCREEN ENDIF cClauses = " WINDOW (oForm.Name) " IF ((NOT THIS.lVFP5) AND THIS.lInCoverageFrame) cClauses = cClauses + ; " IN WINDOW " + THIS.oFrame.Name ENDIF #IF COV_FRX_LANGUAGEOPTIONS_ISSUE LOCAL liLanguageOptions liLanguageOptions = _VFP.LanguageOptions _VFP.LanguageOptions = 0 #ENDIF REPORT FORM (THIS.cProjectFRX) PREVIEW &cClauses #IF COV_FRX_LANGUAGEOPTIONS_ISSUE _VFP.LanguageOptions = liLanguageOptions #ENDIF IF THIS.lVFP5 _SCREEN.WindowState = iState ENDIF IF THIS.lInCoverageFrame THIS.oFrame.Show() ENDIF IF NOT EMPTY(wOnTopWind) ACTIVATE WINDOW (wOnTopWind) TOP ELSE ACTIVATE SCREEN ENDIF SELECT (iSelect) ENDIF RETURN NOT THIS.lError ENDPROC PROCEDURE showstatistics IF DODEFAULT() THIS.MarkOneTargetRecord() && JIC THIS.ShowModalDialog(COV_STATISTICSDIALOG, COV_STATISTICS_CLASSLIB) ENDIF ENDPROC PROCEDURE togglecoverageprofilemode LPARAMETERS tcSource,tcTarget IF DODEFAULT(tcSource,tcTarget) THIS.SetUIToShowCode(tcSource,tcTarget) THIS.NotifyTargetRecordChanged() ENDIF RETURN NOT THIS.lError ENDPROC PROCEDURE setuifonts THIS.frmMainDialog.lstAvailableObjectsAndProcs.FontName = ; THIS.cBaseFontName THIS.frmMainDialog.lstAvailableObjectsAndProcs.FontSize = ; THIS.nBaseFontSize THIS.frmMainDialog.lstAvailableObjectsAndProcs.FontItalic = ; THIS.lBaseFontItalic THIS.frmMainDialog.lstAvailableObjectsAndProcs.FontBold = ; THIS.lBaseFontBold THIS.frmMainDialog.SetListRowHeight() STORE THIS.cBaseMonoFontName TO ; THIS.frmMainDialog.edtCode.FontName, ; THIS.frmZoom.edtCode.FontName STORE THIS.nBaseMonoFontSize TO ; THIS.frmMainDialog.edtCode.FontSize, ; THIS.frmZoom.edtCode.FontSize STORE THIS.lBaseMonoFontItalic TO ; THIS.frmMainDialog.edtCode.FontItalic, ; THIS.frmZoom.edtCode.FontItalic STORE THIS.lBaseMonoFontBold TO ; THIS.frmMainDialog.edtCode.FontBold, ; THIS.frmZoom.edtCode.FontBold IF THIS.frmMainDialog.Visible THIS.frmMainDialog.SynchSizes() ENDIF ENDPROC PROCEDURE setuitoshowfilestates LPARAMETERS tcSource, tcTarget IF DODEFAULT(tcSource, tcTarget) IF EMPTY(tcTarget) OR (UPPER(tcTarget) == UPPER(THIS.cTargetAlias)) THIS.frmMainDialog.cntTools.opgCoverageProfileMode.Value = ; IIF(THIS.lInProfileMode,2,1) THIS.frmMainDialog.Caption = THIS.cSourceFile+" - "+ ; COV_DIALOG_CAPTION_LOC THIS.frmMainDialog.lstAvailableObjectsAndProcs.Value = 1 THIS.NotifyTargetRecordChanged() THIS.frmMainDialog.Show() ELSE * we're in the middle of getting the Engine to parse some * other files we don't want to show in the standard UI * and we don't want to disturb the standard Main Dialog * during this process ENDIF ENDIF RETURN NOT THIS.lError ENDPROC PROCEDURE setuitoshowcode LPARAMETERS tcSource,tcTarget LOCAL cSource,cTarget cSource = THIS.GetAlias(tcSource,"Source") cTarget = THIS.GetAlias(tcTarget,"Target") IF cTarget == THIS.cTargetAlias STORE "IIF(EMPTY("+cTarget+".ObjClass),["+; COV_FULL_SOURCE_FILE_LOC+"], "+; "IIF([!] $ "+cTarget+".ObjClass, "+ ; "SUBSTR("+cTarget+".ObjClass,AT([!],"+cTarget+".ObjClass)+1),"+ ; cTarget+".ObjClass)), "+ ; "IIF(.T.,SPACE(1) +"+ cTarget+".HostFile,[])" TO ; THIS.frmMainDialog.lstAvailableObjectsAndProcs.RowSource STORE cTarget+ ; IIF(THIS.lInProfileMode, ".Profiled",".Marked") ; TO ; THIS.frmMainDialog.edtCode.ControlSource, ; THIS.frmZoom.edtCode.ControlSource IF THIS.frmMainDialog.Visible THIS.frmMainDialog.SynchSizes() ENDIF * because of IntegralHeight and MaxHeight that we * want for list, which depends on number of source entries ELSE * we're in the middle of getting the Engine to parse some * other files we don't want to show in the standard UI ENDIF * the following simply makes sure that UI objects required by the * cov_standard component get built into any project that instantiates * cov_standard: EXTERNAL REPORT COV_PROJECT_FRX EXTERNAL CLASS COV_MAINFORM_CLASSLIB EXTERNAL CLASS COV_ZOOMFORM_CLASSLIB EXTERNAL CLASS COV_STATISTICS_CLASSLIB EXTERNAL CLASS COV_OPTIONS_CLASSLIB EXTERNAL CLASS COV_ADDIN_CLASSLIB EXTERNAL FILE COVERAGE.ICO EXTERNAL FILE HO_SPLIT.CUR EXTERNAL FILE COVERAGE.BMP EXTERNAL FILE ADDINS.BMP EXTERNAL FILE OPEN.BMP EXTERNAL FILE PROFILE.BMP EXTERNAL FILE ZOOM.BMP EXTERNAL FILE OPTIONS.BMP EXTERNAL FILE SAVE.BMP EXTERNAL FILE PREVIEW.BMP EXTERNAL FILE STATS.BMP EXTERNAL FILE FIND.BMP EXTERNAL FILE COVERAGE.MSK EXTERNAL FILE ADDINS.MSK EXTERNAL FILE OPEN.MSK EXTERNAL FILE PROFILE.MSK EXTERNAL FILE ZOOM.MSK EXTERNAL FILE OPTIONS.MSK EXTERNAL FILE SAVE.MSK EXTERNAL FILE PREVIEW.MSK EXTERNAL FILE STATS.MSK EXTERNAL FILE FIND.MSK ENDPROC PROCEDURE markonetargetrecord LPARAMETERS tcSource, tcTarget, tlDoingAll LOCAL lReturn lReturn = DODEFAULT(tcSource, tcTarget, tlDoingAll) IF NOT lReturn IF THIS.iTargetReccount > 0 THIS.iTargetReccount = THIS.iTargetReccount - 1 ENDIF THIS.SetUIToShowCode(tcSource, tcTarget) ENDIF RETURN lReturn ENDPROC PROCEDURE createforms LOCAL lReturn, laCheck[1], cMainAlias, cZoomAlias,cLibs lReturn = DODEFAULT() IF lReturn IF THIS.lInCoverageFrame THIS.oFrame.Show() ELSE ACTIVATE SCREEN ENDIF #IF COV_COMPILED_IN_VFP5 cLibs = SET("CLASSLIB") cMainAlias = THIS.SetClassLibToAlias(COV_MAINFORM_CLASSLIB,THIS.cAppName) cZoomAlias = THIS.SetClassLibToAlias(COV_ZOOMFORM_CLASSLIB,THIS.cAppName) THIS.AddObject("frmMainDialog",cMainAlias+"."+COV_MAINFORM) THIS.AddObject("frmZoom",cZoomAlias+"."+COV_ZOOMFORM) IF NOT EMPTY(cMainAlias+cZoomAlias) IF NOT EMPTY(cLibs) SET CLASSLIB TO &cLibs ELSE SET CLASSLIB TO ENDIF ENDIF #ELSE THIS.NewObject("frmMainDialog",COV_MAINFORM,COV_MAINFORM_CLASSLIB,THIS.cAppName) THIS.NewObject("frmZoom",COV_ZOOMFORM,COV_ZOOMFORM_CLASSLIB,THIS.cAppName) #ENDIF IF TYPE("THIS.frmMainDialog.Name") # "C" OR ; ACLASS(laCheck,THIS.frmMainDialog) = 0 OR ; ASCAN(laCheck,"COV_MAINDIALOG_STANDARD") = 0 OR ; TYPE("THIS.frmZoom.Name") # "C" OR ; ACLASS(laCheck,THIS.frmZoom) = 0 OR ; ASCAN(laCheck,"COV_ZOOMDIALOG") = 0 MESSAGEBOX(COV_BADDIALOGS_LOC,COV_STOP_MESSAGEBOX) lReturn = .F. ENDIF ENDIF RETURN lReturn AND NOT THIS.lError ENDPROC PROCEDURE saveformsetattributes IF DODEFAULT() IF TYPE("THIS.frmMainDialog.Class") = "C" THIS.SetRegistryKeyValue("ZoomMode",THIS.frmMainDialog.lInZoomMode) THIS.SetRegistryKeyValue("FastZoom",THIS.lFastZoomMode) THIS.frmMainDialog.Release() ELSE * may be an early quit ENDIF ELSE RETURN .F. ENDIF ENDPROC PROCEDURE setformsetattributes THIS.lFastZoomMode = ; THIS.GetRegistryKeyValue("FastZoom", THIS.lFastZoomMode) RETURN DODEFAULT() ENDPROC PROCEDURE Init LPARAMETERS tcFile,tlUnattended,tcAddin IF DODEFAULT(tcFile,tlUnattended,tcAddin) #IFDEF COV_OKL_SHOW_FIND_DIALOG ON KEY LABEL COV_OKL_SHOW_FIND_DIALOG COV_PUBLIC_VARIABLE.ShowFindDialog() #ENDIF ELSE RETURN .F. ENDIF ENDPROC PROCEDURE Destroy #IFDEF COV_OKL_SHOW_FIND_DIALOG ON KEY LABEL COV_OKL_SHOW_FIND_DIALOG #ENDIF DODEFAULT() ENDPROC PROCEDURE domessage LPARAMETERS tcMessage, tnMessageBoxOptions, tcMessageBoxTitle ASSERT TYPE("tcMessage") = "C" LOCAL liReturn liReturn = 0 IF TYPE("tnMessageBoxOptions") # "N" tnMessageBoxOptions = 0 ENDIF IF TYPE("tcMessageBoxTitle") # "C" tcMessageBoxTitle = COV_DIALOG_CAPTION_LOC ENDIF IF THIS.lUnattended WAIT WINDOW LEFT(tcMessage,COV_MESSAGE_LIMIT); TIMEOUT COV_TIMEOUT_SECS ELSE liReturn = MESSAGEBOX(tcMessage, tnMessageBoxOptions, tcMessageBoxTitle) ENDIF RETURN liReturn ENDPROC PROCEDURE setuitoshowfilestates LPARAMETERS tcSource,tcTarget * abstract in the engine by design RETURN NOT THIS.lError ENDPROC PROCEDURE setmarks LOCAL iMarkLength * make sure that we've got valid marks IF TYPE("THIS.cMarkExecuted") # "C" OR ; TYPE("THIS.cMarkNotExecuted") # "C" OR ; EMPTY(THIS.cMarkExecuted + THIS.cMarkNotExecuted) * go back to original defaults, * since these are critical entities: THIS.cMarkExecuted = ; THIS.GetRegistryKeyValue("MarkExecuted",COV_DEFAULT_MARKEXECUTED) THIS.cMarkNotExecuted = ; THIS.GetRegistryKeyValue("MarkNotExecuted", COV_DEFAULT_MARKNOTEXECUTED) ENDIF iMarkLength = MAX(LEN(THIS.cMarkExecuted), ; LEN(THIS.cMarkNotExecuted), ; COV_DEFAULT_MARKSPACING) THIS.cMarkExecuted = PADR(THIS.cMarkExecuted,iMarkLength,SPACE(1)) THIS.cMarkNotExecuted = PADR(THIS.cMarkNotExecuted,iMarkLength,SPACE(1)) RETURN NOT THIS.lError ENDPROC PROCEDURE setuitoshowcode LPARAMETERS tcSource,tcTarget * abstract in the engine by design RETURN NOT THIS.lError ENDPROC PROCEDURE setuifonts * abstract in the engine class by design * this is where the font property values, * cBaseFont and nBaseFontSize, * cBaseMonoFont and nBaseMonoFontSize, * get translated to the interface as required in * a given interface RETURN NOT THIS.lError ENDPROC PROCEDURE setuioptions LOCAL lReturn lReturn = THIS.SetFontValues() IF lReturn lReturn = THIS.SetUiFonts() ENDIF IF lReturn lReturn = THIS.GetRegisteredAddins() IF TYPE("THIS.aAddIns[1]") = "C" THIS.cAddIn = THIS.aAddIns[1] ENDIF ENDIF RETURN lReturn AND NOT THIS.lError ENDPROC PROCEDURE passedproperparams LPARAMETERS tcFile,tlUnattended,tcAddIn LOCAL lReturn lReturn = ( (EMPTY(tcFile) OR TYPE("tcFile") = "C") AND ; (EMPTY(tcAddIn) OR TYPE("tcAddIn") = "C") AND ; (EMPTY(tlUnattended) OR TYPE("tlUnattended") = "L") ) IF NOT lReturn * This will actually result in a * messagebox even in * unattended mode, * because that value isn't set yet, * but that's okay -- * we want them to know their automated test went nowhere! * No way to do this except by "getting stuck"... THIS.DoMessage(COV_BAD_PARAMS_LOC,COV_STOP_MESSAGEBOX) ENDIF RETURN lReturn ENDPROC PROCEDURE setlogfile LPARAMETERS tcFile LOCAL lReturn, lcFile, liAnswer, loHost IF TYPE("tcFile") # "C" * there is no SET COVERAGE ON/OFF * SET("COVERAGE") is how you get the filename lcFile = SET("COVERAGE") ELSE lcFile = ALLTRIM(tcFile) IF (NOT EMPTY(lcFile)) AND EMPTY(SYS(2000,FULLPATH(lcFile))) IF AT(".",SUBSTR(lcFile,RAT("\",lcFile)+1)) = 0 * have to substr, because a relative path * might have been passed with .'s on the left end lcFile = lcFile+".log" IF EMPTY(SYS(2000,FULLPATH(lcFile))) AND THIS.lVFP5 lcFile = STRTRAN(lcFile,".log",".txt") ENDIF ENDIF ENDIF IF NOT EMPTY(lcFile) lcFile = FULLPATH(lcFile) ENDIF ENDIF IF EMPTY(lcFile) OR EMPTY(SYS(2000,lcFile)) * offer a chance to find one: lcFile = THIS.GetResourceLocation("", ; COV_GETLOGFILE_TITLE_LOC, ; COV_LOGFILES_LOC+" (*.log;*.txt)|*.log;*.txt|" + ; COV_ALLFILES_LOC+" (*.*)|*.*",; "", ; "getfile" ) ENDIF DO CASE CASE EMPTY(lcFile) AND (NOT EMPTY(THIS.cSourceFile)) * do nothing, just return CASE EMPTY(lcFile) * called from Init, no log has yet been set * but the OCX isn't generating an appropriate * trappable error *!* IF THIS.lUsingOCXs *!* THIS.lUsingOCXs = .F. *!* lcFile = THIS.GetResourceLocation("", ; *!* COV_GETLOGFILE_TITLE_LOC, ; *!* COV_LOGFILES_LOC+" (*.log;*.txt)|*.log;*.txt|" + ; *!* COV_ALLFILES_LOC+" (*.*)|*.*",; *!* "", ; *!* "getfile" ) *!* ENDIF IF EMPTY(lcFile) OR EMPTY(SYS(2000,lcFile)) THIS.DoMessage(COV_LOG_NOT_SPECIFIED_LOC, ; COV_STOP_MESSAGEBOX) ELSE lReturn = .T. ENDIF CASE EMPTY(SYS(2000,lcFile)) liAnswer = THIS.DoMessage(COV_START_LOGGING_LOC, ; COV_YESNOCANCEL_MESSAGEBOX ) DO CASE CASE liAnswer = IDYES SET COVERAGE TO (lcFile) THIS.Release() CASE liAnswer = IDNO lReturn = THIS.SetLogFile() && recursive call OTHERWISE && cancel IF EMPTY(THIS.cSourceFile) THIS.Release() ELSE * go back to previous log ENDIF ENDCASE OTHERWISE lReturn = .T. ENDCASE IF lReturn lcFile = ALLTR(LOWER(lcFile)) IF AT(".",lcFile) = 0 lcFile = lcFile + "." ENDIF THIS.cSourceFile = lcFile ENDIF RETURN lReturn ENDPROC PROCEDURE suspendcoverage IF EMPTY(THIS.cSuspendedLog) THIS.cSuspendedLog = UPPER(SET("COVERAGE")) SET COVERAGE TO ELSE * Coverage is already suspended -- * probably first Activate() after suspension * on startup or we've gone into a modal * dialog associated with this program ENDIF RETURN NOT THIS.lError ENDPROC PROCEDURE resumecoverage LOCAL lReturn IF NOT EMPTY(THIS.cSuspendedLog) LOCAL iResponse IF THIS.lUnattended iResponse = IDYES ELSE iResponse = ; MESSAGEBOX(COV_RESUME_LOC, COV_YESNOCANCEL_MESSAGEBOX) ENDIF IF INLIST(iResponse, IDYES, IDNO) * make an attempt to close any file-editing * windows that the user may have opened, either * through the Coverage app or otherwise, to * view the log -- of course this won't help if * they opened it in Notepad RELEASE WINDOW (SUBSTR(THIS.cSuspendedLog,RAT("\",THIS.cSuspendedLog)+1)) ENDIF THIS.lError = .F. DO CASE CASE iResponse = IDYES SET COVERAGE TO (THIS.cSuspendedLog) ADDITIVE CASE iResponse = IDNO SET COVERAGE TO (THIS.cSuspendedLog) OTHERWISE && IDCANCEL * leave coverage off ENDCASE lReturn = NOT THIS.lError IF THIS.lError * they may have it open in Notepad, or elsewhere... THIS.lError = .F. SET COVERAGE TO MESSAGEBOX(COV_CANNOT_RESUME_LOC, COV_STOP_MESSAGEBOX) ENDIF THIS.cSuspendedLog = "" ENDIF RETURN lReturn ENDPROC PROCEDURE sourcefileislog ASSERT NOT (EMPTY(THIS.cSourceFile) OR ; EMPTY(SYS(2000,THIS.cSourceFile)) ) THIS.ShowStatus(COV_CHECKING_FOR_VALID_LOG_LOC) LOCAL lReturn, iSelect, liFieldCount, iHandle, iLineCount, cLine liFieldCount = IIF(THIS.lVFP5, ; N_COVLOG_FIELDCOUNT_V5, ; N_COVLOG_FIELDCOUNT_V6) lReturn = .T. * check number of commas per line * and check that it isn't empty IF .F. * This code may be dangerous if the * log is too big -- or it may simply * take too long and it's difficult to * give feedback * However it *is* more thorough * a check than the alternative * we're currently using, below, * so it's left in to give * developers a chance to * evaluate this possibility: iSelect = SELECT() CREATE CURSOR Test (onefield m) APPEND BLANK APPEND MEMO onefield FROM (THIS.cSourceFile) * There is currently * an empty header line in the file, * which I don't want to depend on, but * for now subtract one from the number of lines * for that line: lReturn = OCCURS( [COV_LOG_DELIMITER], ; Test.onefield) = ; ((MEMLINES(Test.onefield)-1) * ; (liFieldCount - 1) ) IF NOT lReturn * one more chance; this time w/o empty header line! lReturn = OCCURS( [COV_LOG_DELIMITER], ; Test.onefield) = ; (MEMLINES(Test.onefield) * ; (liFieldCount - 1) ) ENDIF USE IN Test SELECT (iSelect) ELSE * check a spec'd, limited * number of lines in the * log for the proper structure iHandle = FOPEN(THIS.cSourceFile) IF iHandle > -1 iLineCount = 0 DO WHILE NOT FEOF(iHandle) AND ; lReturn AND ; iLineCount < COV_LINES_TO_VALIDATE cLine = FGETS(iHandle,1024) iLineCount = iLineCount + 1 lReturn = EMPTY(cLine) OR ; (OCCURS([COV_LOG_DELIMITER],cLine) = liFieldCount -1) ENDDO ELSE lReturn = .F. ENDIF =FCLOSE(iHandle) ENDIF IF THIS.lError OR (NOT lReturn) lReturn = .F. THIS.lError = .F. THIS.DoMessage(COV_LOG_WRONG_FORMAT_LOC, ; COV_STOP_MESSAGEBOX ) ENDIF THIS.ClearStatus() RETURN lReturn ENDPROC PROCEDURE fillfiletypearray * known source types -- * first column is what the coverage * log has in it and the second column * is what we need to translate to: DIME THIS.aFileTypes[9,2] THIS.aFileTypes[1,1] = ".fxp" THIS.aFileTypes[1,2] = ".prg" THIS.aFileTypes[2,1] = ".dct" THIS.aFileTypes[2,2] = ".dbc" THIS.aFileTypes[3,1] = ".vct" THIS.aFileTypes[3,2] = ".vcx" THIS.aFileTypes[4,1] = ".sct" THIS.aFileTypes[4,2] = ".scx" THIS.aFileTypes[5,1] = ".mpx" THIS.aFileTypes[5,2] = ".mpr" THIS.aFileTypes[6,1] = ".qpx" THIS.aFileTypes[6,2] = ".qpr" THIS.aFileTypes[7,1] = ".spx" THIS.aFileTypes[7,2] = ".spr" THIS.aFileTypes[8,1] = ".frt" THIS.aFileTypes[8,2] = ".frx" THIS.aFileTypes[9,1] = ".lbt" THIS.aFileTypes[9,2] = ".lbx" * note that FRXs will be ignored in 5.0x, * since the source log does not * report on them properly until 6.0 RETURN NOT (EMPTY(THIS.aFileTypes[1,1]) OR THIS.lError) ENDPROC PROCEDURE createcoveragefilenamecursor * this one should not need to change * during the life of the coverage browser * object, unlike all the other workfiles... LOCAL lReturn IF USED(THIS.cCovFilesAlias) lReturn = .T. ELSE CREATE CURSOR (THIS.cCovFilesAlias) ; (FName c(COV_LEN_HOSTFILE)) lReturn = THIS.FillCoverageFileNameCursor() IF lReturn INDEX ON UPPER(FName) TAG FName ENDIF ENDIF RETURN lReturn AND NOT THIS.lError ENDPROC PROCEDURE setupworkfiles LPARAMETERS tcLogFile, tcSource,tcTarget * alias names are passed here because it's possible * to have more than one set of files in * use at once by the engine. You'd have to keep * track of the source, target, and skipped cursor * aliases for each set as you parsed multiple sets. * one set would be the "current set of files" for * each instance of the main dialog within the * coverage formset. LOCAL lReturn, cCurrentSourceFile, cOldPath cCurrentSourceFile = THIS.cSourceFile IF NOT THIS.CreateCoverageFilenameCursor() RETURN .F. ENDIF IF THIS.SetLogFile(tcLogFile) lReturn = .T. ELSE RETURN .F. ENDIF IF lReturn AND (cCurrentSourceFile == THIS.cSourceFile) ASSERT (NOT THIS.lUnattended) * if we're unattended, we're starting * with a log file and going straight through -- * there should be no reason to be setting up * a logfile twice IF MESSAGEBOX(COV_REOPEN_SAME_LOG_FILE_LOC, ; COV_WARNING_YESNO_MESSAGEBOX) = ; IDNO RETURN .T. ENDIF ENDIF * make an attempt to close it, in case it is open: RELEASE WINDOW (SUBSTR(THIS.cSourceFile,RAT("\",THIS.cSourceFile)+1)) THIS.LockScreens(.T.) cOldPath = SET("PATH") IF lReturn lReturn = THIS.SourceFileIsLog() ENDIF IF lReturn THIS.ShowStatus(COV_CREATING_FILES_FROM_LOC+" "+ ; THIS.cSourceFile+"... ") lReturn = ; THIS.CreateSourceCursor(tcSource) ENDIF IF lReturn lReturn = ; THIS.CreateTargetCursor(tcSource, tcTarget) ENDIF THIS.cSavedTargetDBF = "" THIS.cSavedSkipFiles = "" THIS.cSavedStackXML = "" THIS.lInProfileMode = THIS.lStartInProfileMode IF lReturn AND ; (THIS.lUnattended OR THIS.lMarkAllOnLoad) lReturn = THIS.MarkAllTargetRecords(tcSource, tcTarget) ENDIF IF lReturn AND THIS.lUnattended THIS.lInProfileMode = ! THIS.lInProfileMode lReturn = THIS.MarkAllTargetRecords(tcSource, tcTarget) * create both types of markedsource ENDIF DO CASE CASE (NOT lReturn) OR THIS.lError lReturn = .F. THIS.lError = .F. THIS.cSourceFile = cCurrentSourceFile CASE THIS.lUnattended * do nothing OTHERWISE * we're good! THIS.cDefaultWritePath = SUBSTR(THIS.cSourceFile,1,RAT("\",THIS.cSourceFile)) THIS.SetUIToShowCode(tcSource,tcTarget) THIS.SetUIToShowFileStates(tcSource,tcTarget) ENDCASE SET PATH TO (cOldPath) THIS.ClearStatus() THIS.LockScreens(.F.) RETURN lReturn ENDPROC PROCEDURE createskippedcursor LPARAMETERS tcSource, tcSkipped LOCAL cSkipped, cSource, iSelect iSelect = SELECT() cSource = THIS.GetAlias(tcSource,"Source") cSkipped = THIS.GetAlias(tcSkipped,"Skipped") IF USED(cSkipped) USE IN (cSkipped) ENDIF SET DELETED OFF * LOWER() tags... SELECT Hostfile AS Skipped FROM (cSource) ; WHERE DELETED() AND ; (LOWER(Hostfile) # SPACE(COV_LEN_HOSTFILE)) ; INTO CURSOR (cSkipped) ; GROUP BY Skipped SET DELETED ON SELECT (iSelect) RETURN NOT THIS.lError ENDPROC PROCEDURE saveskippedcursor LPARAMETERS tcSkipped LOCAL cSkipped, cDBFName, iSelect iSelect = SELECT() cSkipped = THIS.GetAlias(tcSkipped,"Skipped") IF RECCOUNT(cSkipped) = 0 RETURN .T. ENDIF cDBFName = THIS.GetTableName(COV_SKIPFILEDBF_SUFFIX) SELECT * FROM (cSkipped) INTO TABLE (cDBFName) SELECT (iSelect) IF NOT THIS.lError THIS.cSavedSkipFiles = cDBFName ELSE THIS.cSavedSkipFiles = "" ENDIF RETURN NOT THIS.lError ENDPROC PROCEDURE createsourcecursor LPARAMETERS tcSource LOCAL lReturn, cSource cSource = THIS.GetAlias(tcSource,"Source") IF USED(cSource) USE IN (cSource) ENDIF IF THIS.lVFP5 CREATE CURSOR (cSource) ; (Duration n(COV_LEN_DURATION,N_COVLOG_PRECISION), ; ObjClass c(COV_LEN_OBJCLASS), ; Executing c(COV_LEN_EXECUTING), ; Procline i, ; Hostfile c(COV_LEN_HOSTFILE), ; FileType c(4) ) ELSE CREATE CURSOR (cSource) ; (Duration n(COV_LEN_DURATION,N_COVLOG_PRECISION), ; ObjClass c(COV_LEN_OBJCLASS), ; Executing c(COV_LEN_EXECUTING), ; Procline i, ; Hostfile c(COV_LEN_HOSTFILE), ; Stacklevel i, ; FileType c(4) ) ENDIF * all this except last column * is ordained by structure of the log file * and matches what you'll find in the docs, except * that I've increased field lens & removed reserved * words from the field names used in the docs! * -- however, see function called below, you aren't * limited to this structure, you can add extra fields SELECT (cSource) THIS.AdjustSourceCursor(cSource) * -- add additional flag/filter columns, indexes for * processing or whatever you want; see notes in this * absract method for usage INDEX ON LOWER(Hostfile) TAG Hostfile * this tag needed when the cursor is filled SET ORDER TO 0 lReturn = THIS.FillSourceCursor(cSource) THIS.ShowStatus(COV_INDEXING_SOURCE_RECORDS_LOC) IF lReturn * The tags below are all going to be * used for LOCATEs or FOR conditions at some point. * INDEX ON LOWER(Hostfile) TAG Hostfile && already done INDEX ON LOWER(ObjClass) TAG ObjClass INDEX ON Procline TAG Procline INDEX ON LOWER(Executing) TAG Executing * INDEX ON LOWER(ALLTRIM(ObjClass)+"."+Executing) TAG VCXObject * INDEX ON SUBSTR(Executing,1,AT(".",Executing)) TAG TopContainer INDEX ON DELETED() TAG IfDel ENDIF SET ORDER TO 0 THIS.ClearStatus() RETURN lReturn AND NOT THIS.lError ENDPROC PROCEDURE adjustsourcecursor LPARAMETERS tcSource * abstract in the engine by design * called twice, during CreateSourceCursor() and * FillSourceCursor(). * you can tell which call it is by checking * EMPTY(RECCOUNT()) and TAGCOUNT(); the first call in * CreateSourceCursor, after the structure * exists, is designed to allow you * to do stuff like this: * LOCAL cSource * cSource = THIS.GetAlias(tcSource,"Source") * ALTER TABLE (cSource) ; * ADD COLUMN Flag i * ... the second one, after the APPEND * of the text log records, would allow you to * remove some before FillSourceCursor goes * on to massage the record set by calling * SourceAvailable(), etc. * You can, additionally, augment SourceAvailable() * to massage the "valid" log records for which * source code has been found, filling your * flag fields, for example. RETURN NOT THIS.lError ENDPROC PROCEDURE createtargetcursor LPARAMETERS tcSource, tcTarget LOCAL cSource, cTarget, lReturn cTarget = THIS.GetAlias(tcTarget,"Target") cSource = THIS.GetAlias(tcSource,"Source") IF USED(cTarget) USE IN (cTarget) ENDIF * we're adding together the class and executing * information for visual classes, * although we're going to have to take * some of this information out again when we * actually try to match up this information with * vcx records in the next step. * For programmatic code, we just need the Executing * information: THIS.ShowStatus(COV_CREATING_TARGET_ITEMS_LOC) IF THIS.lVFP5 SELECT Hostfile , ; PADR(ALLTR(ObjClass)+ ; IIF((NOT EMPTY(ObjClass) ) AND ; AT(".",Executing) > 0, ; ".","")+ ; SUBSTR(Executing,1,RAT(".",Executing)-1), ; COV_LEN_OBJCLASS) ; AS ObjClass,; FileType ; DISTINCT ; FROM (cSource) WHERE NOT DELETED() ; INTO CURSOR Temp ; ORDER BY 1,2 ELSE SELECT Hostfile , ; PADR(IIF(INLIST(FileType,".fxp",".mpx",".qpx",".spx"), ; SUBSTR(Executing,1,RAT(".",Executing)-1), ; ALLTR(ObjClass)+ ; IIF((NOT EMPTY(ObjClass) ) AND ; AT(".",Executing) > 0, ; "!","")+ ; SUBSTR(Executing,1,RAT(".",Executing)-1)), ; COV_LEN_OBJCLASS) ; AS ObjClass,; FileType ; DISTINCT ; FROM (cSource) WHERE NOT DELETED() ; INTO CURSOR Temp ; ORDER BY 1,2 ENDIF CREATE CURSOR (cTarget) ; (Hostfile c(COV_LEN_HOSTFILE), ; ObjClass c(COV_LEN_OBJCLASS), ; FileType c(4), ; Marked m, ; Profiled m, ; SourceCode m, ; Coverable i, ; Covered i, ; ObjTotal i, ; ObjHits i) *&* change from n(8) for all i fields above SELECT (cTarget) && JIC APPEND FROM (DBF("Temp")) USE IN Temp THIS.AdjustTargetCursor(cTarget) * -- add additional flag/filter columns, indexes for * processing or whatever you want SELECT (cTarget) && JIC INDEX ON Hostfile+ObjClass TAG Standard INDEX ON Hostfile TAG Hostfile INDEX ON DELETED() TAG IfDel SET ORDER TO 0 THIS.ClearStatus() lReturn = THIS.FillTargetCursor(cSource, cTarget) RETURN lReturn AND NOT THIS.lError ENDPROC PROCEDURE adjusttargetcursor LPARAMETERS tcTarget * abstract in the engine by design RETURN NOT THIS.lError ENDPROC PROCEDURE adjustcoveragefilenamecursor * abstract in the engine by design * note: no filename is passed because * there is only supposed to be one of * these. RETURN NOT THIS.lError ENDPROC PROCEDURE savetargettodisk LPARAMETERS tcTarget LOCAL cDBFDefaultName, lReturn, iSelect, cTarget, cDetritus, iPos lReturn = .T. cTarget = THIS.GetAlias(tcTarget,"Target") cDBFDefaultName = THIS.GetTableName(COV_TARGETDBF_SUFFIX) IF THIS.lUnattended THIS.cSavedTargetDBF = cDBFDefaultName ELSE THIS.cSavedTargetDBF = ; THIS.GetResourceLocation(THIS.cSourceFile, ; COV_SETTARGETDBF_TITLE_LOC, ; COV_DBFSONLY_LOC + " (*.dbf)|*.dbf", ; cDBFDefaultName, ; "PUTFILE") lReturn = (NOT(EMPTY(THIS.cSavedTargetDBF))) ENDIF IF lReturn iSelect = SELECT() SELECT (cTarget) COPY TO (THIS.cSavedTargetDBF) IF NOT THIS.lError SELE 0 USE (THIS.cSavedTargetDBF) ALIAS Temp EXCLU ALTER TABLE Temp DROP COLUMN SourceCode ALTER TABLE Temp DROP COLUMN FileType USE IN Temp * now get rid of any trash * ALTER TABLE may leave behind: cDetritus = LOWER(THIS.cSavedTargetDBF) iPos = AT(".",cDetritus) IF iPos > 0 cDetritus = SUBSTR(cDetritus,1,iPos -1) ENDIF IF NOT EMPTY(SYS(2000,cDetritus+".bak")) ERASE (cDetritus+".bak") NORECYCLE ENDIF IF NOT EMPTY(SYS(2000,cDetritus+".tbk")) ERASE (cDetritus+".tbk") NORECYCLE ENDIF ENDIF SELECT (iSelect) ENDIF IF THIS.lError THIS.cSavedTargetDBF = "" ENDIF RETURN lReturn AND NOT THIS.lError ENDPROC PROCEDURE fillonetargetrecord LPARAMETERS tcSource, tcTarget, tlFillingAll LOCAL cSource, cTarget, iSelect, cFile, cObject , cClass, ; cMemo, lMemofield, iPos, lReturn, cFileType, ; iObjTotal, iRecNo, cSourceOrder, ; lAlreadyHadSourceCode, cContainer, iDots, aTemp[1] ASSERT (EMPTY(tcSource) AND EMPTY(tcTarget)) OR ; (TYPE("tcSource") = "C" AND USED(tcSource) AND ; TYPE("tcTarget") = "C" AND USED(tcTarget)) IF EMPTY(tcSource) cSource = THIS.GetAlias(tcSource,"Source") cTarget = THIS.GetAlias(tcTarget,"Target") ELSE cSource = tcSource cTarget = tcTarget ENDIF iSelect = SELECT() SELECT (cTarget) iRecNo = RECNO() cObject = ALLTR(LOWER(ObjClass)) IF "!" $ cObject cClass = LEFT(cObject,AT("!",cObject)-1) cObject = SUBSTR(cObject,LEN(cClass)+2) ELSE cClass = "" ENDIF cFile = ALLTR(LOWER(Hostfile)) cFileType = FileType iObjTotal = ObjTotal cMemo = "" DO CASE CASE EMPTY(Hostfile) * Problem ! CASE NOT EMPTY(SourceCode) lAlreadyHadSourceCode = .T. OTHERWISE * fill it IF NOT tlFillingAll THIS.LockScreens(.T.) ENDIF THIS.ShowStatus(COV_GETTING_SOURCECODE_FROM_LOC+" "+ ; ALLTR(cFile)+"."+cObject+"...") lMemofield = ; INLIST(cFileType,".vct",".sct",".dct",".frt",".lbt") IF lMemofield * it's a memofield IF tlFillingAll AND USED("Temp") IF LOWER(DBF("Temp")) == LOWER(cFile) SELECT Temp ELSE USE IN Temp ENDIF ENDIF IF NOT USED("Temp") SELECT 0 USE (cFile) NOUPDATE SHARED ALIAS Temp ENDIF IF NOT THIS.lError DO CASE CASE cFileType = ".dct" * it's a dbc LOCATE FOR ALLTR(LOWER(objectname)) == ; "storedproceduressource" cMemo = Code CASE INLIST(cFileType,".sct",".vct") LOCATE FOR IIF(EMPTY(Parent), LOWER(ALLTR(objName)), ; LOWER(ALLTR(Parent)+"."+ALLTR(objName)) ); == cObject IF FOUND() cMemo = Methods ELSE * Is it a DE object or DE member object? * For DE objects, the log treats them as members of * the form or formset, but the SCX does not * list them as member objects of the form or formset. LOCATE FOR INLIST(LOWER(ALLTR(BaseClass)), ; "dataenvironment","relation","cursor") ; AND IIF(EMPTY(Parent), LOWER(ALLTR(objName)), ; LOWER(ALLTR(Parent)+"."+ALLTR(objName)) ) == ; RIGHT(cObject,LEN(IIF(EMPTY(Parent), LOWER(ALLTR(objName)), ; LOWER(ALLTR(Parent)+"."+ALLTR(objName)) ))) IF FOUND() cMemo = Methods ELSE * the current contents of the Target cObject * information can be difficult to interpret, * since it shows all containership in one field. * For example, an AddObject or a CreateObject * may have create container levels in the third * field of the log that have nothing to do with * reality as far as the classes in the actual VCX * are concerned. * look for the parent record this member really * belongs in: IF THIS.lVFP5 cContainer = cObject FOR iDots = 1 TO OCCURS(".",cObject) cContainer = SUBSTR(cContainer,1,RAT(".",cObject)-1) LOCATE FOR IIF(EMPTY(Parent), LOWER(ALLTR(objName)), ; LOWER(ALLTR(Parent)+"."+ALLTR(objName)) ); = cContainer AND NOT EMPTY(Methods) IF FOUND() * does this container's record * already exist in the Target file? cMemo = Methods IF SEEK(PADR(cFile, COV_LEN_HOSTFILE)+ ; PADR(cContainer,COV_LEN_OBJCLASS), ; cTarget,"Standard") * this record will take care of it REPLACE SourceCode WITH cMemo IN (cTarget) GO iRecNo IN (cTarget) IF FOUND(cTarget) * call this an unsuccessful "go" * so that the record will be deleted: cMemo = "" ENDIF ELSE GO iRecNo IN (cTarget) REPLACE ObjClass WITH cContainer IN (cTarget) ENDIF EXIT ENDIF ENDFOR ELSE FOR iDots = OCCURS(".",cObject) TO 0 STEP -1 IF iDots = 0 cContainer = SUBSTR(cObject,1,AT(".",cObject)-1) ELSE iPos = AT(".",cObject,iDots) IF iDots = OCCURS(".",cObject) cContainer = SUBSTR(cObject,iPos+1) ELSE cContainer = SUBSTR(cObject,iPos+1,AT(".",cObject,iDots+1)-iPos-1) ENDIF ENDIF LOCATE FOR ; LOWER(ALLTR(Parent)+"."+ALLTR(objName)) ; == ALLTR(cClass)+"."+cContainer AND ; NOT EMPTY(Methods) IF FOUND() * does this container's record * already exist in the Target file? cMemo = Methods IF SEEK(PADR(cFile, COV_LEN_HOSTFILE)+ ; PADR(cContainer,COV_LEN_OBJCLASS), ; cTarget,"Standard") * this record will take care of it, ; * let's pre-fill this record wherever * it is, so as not to waste time when * we find this record later in the pass IF EMPTY(&cTarget..SourceCode) REPLACE SourceCode WITH cMemo IN (cTarget) ENDIF GO iRecNo IN (cTarget) ELSE GO iRecNo IN (cTarget) ENDIF * call this an unsuccessful "go" * so that the record will be deleted: cMemo = "" EXIT ENDIF ENDFOR ENDIF ENDIF ENDIF CASE INLIST(cFileType,".frt",".lbt") * dataenvironment,relation,cursor objects only iPos = AT(".",cObject) IF iPos = 0 * dataenvironment object LOCATE FOR ObjType = N_FRX_DATAENVIRONMENT_OBJTYPE ELSE cObject = [name="]+SUBSTR(cObject,iPos+1)+["] LOCATE FOR ObjType = N_FRX_CURSOR_RELATION_OBJTYPE AND ; ATC(cObject,STRTRAN(Expr,SPACE(1),"")) > 0 ENDIF cMemo = TAG OTHERWISE * no other possibilities yet... ENDCASE ELSE cMemo = "" ENDIF ELSE * it's a text source file... we've already * validated these filenames... IF AT(".",cObject) > 0 * a member object with no DEFINE CLASS * of its own in this file -- its * code will be in its container DEFINE CLASS * this is only likely to happen in cFileType = ".fxp" * but theoretically this could also be in an ".mpx" etc... cMemo = "" ELSE CREATE CURSOR Temp (onefield m) SELECT Temp APPEND BLANK APPEND MEMO onefield FROM (cFile) cMemo = onefield ENDIF ENDIF IF THIS.lError THIS.DoMessage(COV_SOURCE_CANNOT_BE_OPENED_LOC + ; C_DOUBLE_CR+ ; "("+cFile+")", ; COV_STOP_MESSAGEBOX) * insure that the file will show up in the * Skipped files list: SEEK PADR(cFile,COV_LEN_HOSTFILE) ; IN (cSource) ; ORDER Hostfile DELETE IN (cSource) ELSE *&* Note: Statistics may be removed *&* for performance boost using COV_TOPSPEED #define IF (NOT COV_TOPSPEED) AND ; EMPTY(iObjTotal) AND ; INLIST(cFileType,".vct",".sct", ".frt", ".lbt") * first object hit from this file: * some objects may not have been touched at all, * figure out how many classes containing * code were actually touched, * for accurate file and project statistics: IF INLIST(cFileType,".vct",".sct") COUNT ALL FOR (NOT EMPTY(Methods)) AND (NOT DELETED()) ; TO iObjTotal ELSE && report or label COUNT ALL FOR ; INLIST(ObjType,; N_FRX_DATAENVIRONMENT_OBJTYPE, ; N_FRX_CURSOR_RELATION_OBJTYPE) AND ; (NOT EMPTY(TAG)) AND ; (NOT DELETED()) ; TO iObjTotal ENDIF SELE (cTarget) SEEK cFile REPLACE ObjTotal WITH iObjTotal ; WHILE LOWER(Hostfile) = PADR(cFile,COV_LEN_HOSTFILE) GO iRecNo && we don't have to worry about EOF() && because we never would have gotten && into this case... ENDIF * statistics on hits in the target file * on this total number of objects * can't be handled until * we've checked all target records * for containership (which target records * belong to which actual VCX/VCT records) SELECT (cTarget) REPLACE SourceCode WITH cMemo ENDIF IF USED("Temp") AND (NOT tlFillingAll) * if it was a memofield type source and * an error occurred opening the field, * it won't be open... * if we're filling all records, we don't * want to close the source file yet USE IN Temp ENDIF IF (NOT tlFillingAll) THIS.LockScreens(.F.) THIS.ClearStatus() ENDIF ENDCASE lReturn = (lAlreadyHadSourceCode OR ; NOT EMPTY(cMemo)) AND ; NOT THIS.lError THIS.lError = .F. SELECT (iSelect) RETURN lReturn ENDPROC PROCEDURE fillsourcecursor LPARAMETERS tcSource LOCAL cCoverageFileName, lReturn, ; cSource, cOrder, iSelect, ; cThisHost, cNewHost, cFileType, iRecNo, lRecordOK, ; iOdometer, cTalkWindow cSource = THIS.GetAlias(tcSource,"Source") cCoverageFileName = LOWER(_COVERAGE) iSelect = SELECT() THIS.ShowStatus(COV_CHECKING_SOURCE_AVAIL_FROM_LOC+; " "+THIS.cSourceFile) SELECT (cSource) cOrder = ORDER() SET ORDER TO 0 * TALK is scoped to the datasesion, * but the following are *not* scoped * to the datasession: iOdometer = SET("ODOMETER") cTalkWindow = SET("TALK",1) SET ODOMETER TO 1000 SET TALK ON IF THIS.lInCoverageFrame SET TALK WINDOW (THIS.oFrame.Name) ELSE SET TALK NOWINDOW ACTI SCREEN * the ACTI SCREEN * appears to be necessary * when SET("STATUS BAR") is "OFF" ENDIF APPEND FROM (THIS.cSourceFile) ; TYPE DELIMITED WITH CHARACTER COV_LOG_DELIMITER ; FOR Procline > 0 AND ; (LOWER(Hostfile) # SPACE(COV_LEN_HOSTFILE)) SET TALK OFF SET ODOMETER TO iOdometer SET TALK &cTalkWindow THIS.AdjustSourceCursor(cSource) * a second call -- see notes in this abstract * method for usage. GO TOP DO CASE CASE THIS.lInCoverageFrame THIS.oFrame.Cls() CASE SET("STATUS BAR") = "OFF" _SCREEN.Cls() OTHERWISE SET MESSAGE TO ENDCASE SCAN IF EMPTY(FileType) cThisHost = LOWER(Hostfile) THIS.ShowStatus(ALLTR(Hostfile)) lRecordOK = THIS.SourceAvailable() cNewHost = Hostfile cFileType = FileType iRecNo = RECNO() IF NOT lRecordOK DELETE REST FOR LOWER(Hostfile) = cThisHost ELSE REPLACE Hostfile WITH cNewHost, ; FileType WITH cFileType ; REST FOR LOWER(Hostfile) = cThisHost ENDIF GO iRecNo ENDIF ENDSCAN SET ORDER TO (cOrder) LOCATE lReturn = (NOT EOF()) SELECT (iSelect) IF NOT lReturn THIS.DoMessage(COV_LOG_HAS_NO_USABLE_RECORDS_LOC, ; COV_STOP_MESSAGEBOX ) ENDIF THIS.ClearStatus() RETURN lReturn ENDPROC PROCEDURE addpath LPARAMETERS tcFileName ASSERT TYPE("tcFileName") = "C" AND NOT EMPTY(SYS(2000,tcFileName)) * the fullpath of an existing filename must have been passed * or this procedure doesn't make a lot of sense. * note that we don't use relative paths here * because it is possible for somebody to * do CD/SET DEFA as part of add-on code -- that would * allow for more "dense" path searches in spite of * path length limit, but wouldn't be safe. IF THIS.lSmartPath LOCAL cAddPath cAddPath = SUBSTR(tcFileName,1,RAT("\",tcFileName)) IF (ATC(cAddPath+";",SET("PATH")+";") = 0) AND ; (LEN(cAddPath+";"+SET("PATH")) < N_VFP_PATH_LIMIT ) SET PATH TO (cAddPath+";"+SET("PATH")) ENDIF ENDIF RETURN NOT THIS.lError ENDPROC PROCEDURE sourceavailable LOCAL lReturn, cFileType, cNewHost,cOldHost, ; icol, iElement, cDefaultExt, iPos IF EMPTY(Procline) OR EMPTY(Hostfile) * easy call: RETURN .F. * no source available or stuff like ON SELECTION, ON KEY -- * -- these are the EMPTY(ProcLine) items -- * this means that command results in MPRs are not very * well covered in the coverage log, although the procedures * or methods you call within those commands will be logged. * EMPTY(Hostfile) may be a similar record or it may be a * result of a run through this procedure for an earlier * record and an inability to find this source file, * with or without the user's help. * Although this note and this code construct helps you * understand what decisions the engine makes, ordinarily * the calling routine is FillSourceCursor, * which will have DELETEd any EMPTY(Procline) records * and any records that start out with EMPTY(Hostfile) * fields before making this call, and earlier calls to * this routine would have already DELETEd records * for which the source file could not have been found. ENDIF icol = 0 cOldHost = LOWER(ALLTR(Hostfile)) cFileType = RIGHT(cOldHost,4) iElement = ASCAN(THIS.aFileTypes,cFileType) IF LEN(cFileType) # 4 && abnormal extension icol = 1 iElement = 0 * a PRG could have any original extension, * unlike other compiled types. ENDIF IF iElement # 0 icol = ASUBSCRIPT(THIS.aFileTypes,iElement,2) ENDIF DO CASE CASE THIS.lvfp5 AND INLIST(cFileType, ".frt" , ".lbt") * nothing we can do with this in 5.0x... CASE icol = 2 * source types we replaced from earlier * REPLACES on passes this function -- * we don't need to do anything CASE THIS.lIgnoreCoverageFilenames AND ; SEEK(UPPER(RIGHT(ALLTRIM(Hostfile), ; LEN(ALLTR(Hostfile))- ; RAT("\",ALLTRIM(Hostfile)))), ; THIS.cCovFilesAlias ) * we don't want this file, it belongs to * the coverage mechanism or other IgnoredFiles... CASE INLIST(cFileType,".app",".exe") cNewHost = THIS.GetResourceLocation( cOldHost, ; COV_GETMAINFILE_TITLE_LOC, ; COV_PROGRAMSONLY_LOC + " (*.prg)|*.prg|"+ ; COV_ALLFILES_LOC+" (*.*)|*.*",; ALLTR(Executing), ; "GETFILE") IF EMPTY(cNewHost) OR EMPTY(SYS(2000,cNewHost)) * can't use it... ELSE lReturn = .T. * the NewHost extension may be anything, * but the OldHost extension will be * .fxp, giving us the filetype for parsing * purposes REPLACE Hostfile WITH cNewHost, ; FileType WITH ".fxp" THIS.AddPath(cNewHost) ENDIF CASE icol = 1 * compiled or memo source types... * get the matching extension we want * from the second column: IF iElement = 0 cFileType = ".fxp" iPos = AT(".",cOldHost) IF iPos > 0 cNewHost = FULLPATH(SUBSTR(cOldHost,1,iPos-1)+".prg") ELSE cNewHost = FULLPATH(cOldHost+".prg") ENDIF ELSE cNewHost = FULLPATH(STRTR(cOldHost,cFileType, ; THIS.aFileTypes(ASUBSCR(THIS.aFileTypes,; iElement,1),2))) ENDIF IF EMPTY(SYS(2000,cNewHost)) cDefaultExt = RIGHT(cNewHost,4) IF iElement = 0 * we have no idea what the source extension was, * show all files: cNewHost = THIS.GetResourceLocation(cNewHost,; COV_GETSOURCEFILE_TITLE_LOC, ; COV_SOURCEFILES_LOC+" (*"+cDefaultExt+")|*"+cDefaultExt+"|"+ ; COV_ALLFILES_LOC+" (*.*)|*.*",; cNewHost, ; "GETFILE") ELSE cNewHost = THIS.GetResourceLocation(cNewHost,; COV_GETSOURCEFILE_TITLE_LOC, ; COV_SOURCEFILES_LOC+" (*"+cDefaultExt+")|*"+cDefaultExt, ; cNewHost, ; "GETFILE") ENDIF ELSE cNewHost = LOWER(cNewHost) ENDIF IF EMPTY(SYS(2000,cNewHost)) OR EMPTY(cNewHost) * can't use this one... ELSE lReturn = .T. REPLACE Hostfile WITH cNewHost, ; FileType WITH cFileType THIS.AddPath(cNewHost) ENDIF OTHERWISE * iCol = 0 -- a filetype we can't handle! ENDCASE RETURN lReturn ENDPROC PROCEDURE marktargetcoverage LPARAMETERS tcSource, tcTarget LOCAL cSource, cTarget, iSelect, ; cText, cMemo, iSelect, nFirst, nAverage, iPos, cTemp, ; iFileLineNo, iOffSet, iProcLineNo, iLines, ; cLine, cRealLine, iPosComment, iPosOpenParen, ; cHostFile, cObject, cClass, cFileType, ; lInitialMemberAssignments, iExecuted, ; cExecuting, cFilter, cFirstWord, ; iCoverableLines, iLinesCovered, ; lRelToProc,iSecondWord, cSecondWord, lInText,iLenFirstWord iSelect = SELECT() cSource = THIS.GetAlias(tcSource,"Source") cTarget = THIS.GetAlias(tcTarget,"Target") SELECT (cTarget) cText = SourceCode cHostFile = PADR(LOWER(Hostfile),COV_LEN_HOSTFILE) cObject = LOWER(ObjClass) IF "!" $ cObject cClass = LEFT(cObject,AT("!",cObject)-1) cObject = SUBSTR(cObject,LEN(cClass)+2) ELSE cClass = "" ENDIF cClass = PADR(cClass,COV_LEN_OBJCLASS) cFileType = LOWER(FileType) cExecuting = "" cFilter = "" IF ( (THIS.lVfp5) OR ("PRO 06." $ UPPER(VERSION())) ) lRelToProc = ; INLIST(cFileType,".vct",".sct",".frt",".lbt",".dct") ELSE lRelToProc = ; INLIST(cFileType,".vct",".sct",".frt",".lbt") ENDIF * change to DBC handling for VFP 7 -- * DBC linenos are no longer relative to procedure. * This method must treat some code storage formats * differently than others. Filetypes inlist * SCX,VCX,FRX,LBX have log linenos * relative to each method, but * filetypes inlist QPR,MPR,PRG,SPR,DBC * have their linenos relative to the full file. * (Previous to VFP 7, DCX linenos were relative to procedure.) * This method also treats objects * DEFINEd programmatically slightly differently * from non-class code in the same PRG. Each DEFINEd CLASS * could potentially show up separately in the target file * although we're not creating separate records for * each programmatic class in the target file currently. iLines = MEMLINES(cText) STORE 0 TO iOffSet, iProcLineNo, _MLINE, ; iCoverableLines, iLinesCovered cMemo = "" IF NOT (lRelToProc OR EMPTY(cObject)) * skip lines not pertinent to this class, because * they are "outside" the class definition we want -- * an issue for programmatically-defined classes only * if we are treating them as separate items in the * browser, which may or may not occur in other versions * of the code. In this version, * all programmatic classes are shown only in one * target record, IOW the PRG is treated as the target * object, but these classes *could* be parsed into * separate target records. If that happened, * the code below would be necessary (cObject would not * be empty in this case). FOR iFileLineNo = 1 TO iLines cRealLine = MLINE(cText,1,_MLINE) cLine = ALLTR(STRTRAN(LOWER(cRealLine), C_TAB,"")) IF (LEFT(cLine,12) = "define class" OR ; LEFT(cLine,7) = "defin c" OR ; LEFT(cLine,6) = "defi c") AND ; " "+ALLTR(cObject)+" " $ cLine cMemo = cMemo + THIS.cMarkExecuted + ; cRealLine + C_CR iOffSet = iFileLineNo lInitialMemberAssignments = .T. EXIT ENDIF ENDFOR ENDIF FOR iFileLineNo = 1 TO (iLines-iOffSet) * notice I don't reset the _MLINE var: cRealLine = MLINE(cText,1,_MLINE) cLine = ALLTR(cRealLine) cLine = ALLTR(STRTRAN(LOWER(cLine), C_TAB,SPACE(1))) iSecondWord = AT(SPACE(1),cLine) IF iSecondWord > 0 cFirstWord = ALLTR(LEFT(cLine,iSecondWord)) cSecondWord = ALLTR(SUBSTR(cLine,iSecondWord)) iSecondWord = AT(SPACE(1),cSecondWord) IF iSecondWord > 0 cSecondWord = ALLTR(LEFT(cSecondWord,iSecondWord)) ENDIF ELSE cFirstWord = cLine cSecondWord = "" ENDIF iLenFirstWord = LEN(cFirstWord) STORE 0 TO iExecuted, nAverage, nFirst IF (NOT (lRelToProc OR EMPTY(cObject))) AND ; (NOT EMPTY(cFirstWord)) AND ; "#"+cFirstWord $ "#enddefine#" * finished with the programmatic class definition * -- never happens in visually-designed classes * See above; this code doesn't actually execute * at the moment but would be necessary if * programmatic classes had separate records * in the target file cMemo = cMemo + THIS.cMarkExecuted + ; cRealLine + C_CR EXIT ENDIF * moved up before evaluation of cExecuting * Nov 2000, to handle lRelToProc procedure line names * including comments. iPosComment = AT(C_INLINECOMMENT, cLine) IF iPosComment > 0 cLine = ALLTR(SUBSTR(cLine,1,iPosComment-1)) ENDIF IF lRelToProc IF (NOT EMPTY(cFirstWord)) AND ; "#"+cFirstWord $ "#method#procedure#function#" * starting a new procedure, get name, new offset iProcLineNo = 0 cExecuting = ALLTR(SUBSTR(cLine, AT(" ",cLine))) iPosOpenParen = AT("(",cExecuting) IF iPosOpenParen > 0 cExecuting = LEFT(cExecuting,iPosOpenParen-1) ENDIF iPosOpenParen = AT("[",cExecuting) IF iPosOpenParen > 0 cExecuting = LEFT(cExecuting,iPosOpenParen-1) ENDIF ELSE iProcLineNo = iProcLineNo + 1 ENDIF ELSE * programmatically defined classes * This is necessary whether or not we're * showing all programmatic classes in * separate records. DO CASE CASE EMPTY(cFirstWord) * empty line, nothing CASE iLenFirstWord < 4 * could be def = I guess! CASE "#"+cFirstWord $ "#define#" AND "#"+cSecondWord $ "#class#" lInitialMemberAssignments = .T. * start initial assigments CASE "#"+cFirstWord $ "#procedure#method#function#" lInitialMemberAssignments = .F. * finished with initial assignments OTHERWISE * nothing ENDCASE ENDIF * Nov 2000 moved inline comment evaluation * up from this position to its current position * above. * Now that we have the line, we need to look * at stats for that line * comparisons below are meant to be inexact, not ==. DO CASE CASE EMPTY(cLine) iExecuted = .NULL. CASE lInitialMemberAssignments iExecuted = .NULL. CASE RIGHT(cLine,1) = ; C_CONTINUATION_SYMBOL iExecuted = .NULL. CASE INLIST(LEFT(cLine,1),C_COMMENT,C_DEFINE) OR ; LEFT(cLine,2) = C_INLINECOMMENT iExecuted = .NULL. CASE cFirstWord == "add" AND "#"+cSecondWord $ "#object#" iExecuted = .NULL. * single word lines: CASE iLenFirstWord = 4 AND ; EMPTY(cSecondWord) AND ; INLIST(cFirstWord,"else","note") iExecuted = .NULL. * multi word lines or first word could be longer than 4 letters: CASE iLenFirstWord > 3 AND ; "#"+cFirstWord $ ; "#function#procedure#endprocedure#endtext#note#else#otherwise"+ ; "#parameters#lparameters#enddefine#endfunction#endmethod#endif#endcase#" iExecuted = .NULL. IF "#"+cFirstWord $ "#endtext#" lInText = .F. ENDIF CASE lInText iExecuted = .NULL. CASE NOT lRelToProc && PRG type code cTemp = ALLTR(STR(iFileLineNo + iOffSet)) cFilter = "LOWER(Hostfile) = cHostfile AND "+; "Procline = "+cTemp CASE EMPTY(cObject) && dbc in VFP 5 or 6 cTemp = PADR(ALLTR(cExecuting),COV_LEN_EXECUTING) cFilter = "LOWER(Hostfile) = cHostfile AND "+ ; "LOWER(Executing) = ["+cTemp+"] AND "+ ; "ProcLine = iProcLineNo" CASE cFileType =".vct" IF THIS.lVFP5 * I'm not optimizing this one yet... IF "." $ cObject cTemp = PADR(SUBSTR(cObject,1,AT(".",cObject)-1), COV_LEN_OBJCLASS) ELSE cTemp = PADR(cObject, COV_LEN_OBJCLASS) ENDIF cFilter = "LOWER(Hostfile) = cHostfile AND " + ; "LOWER(ObjClass) = ["+cTemp+"] AND " + ; "ProcLine = iProcLineNo " cTemp = ALLTR(cExecuting) IF "." $ cObject cTemp = ALLTR(SUBSTR(cObject,AT(".",cObject)+1))+"."+cTemp ENDIF cTemp = "." + cTemp iPos = LEN(cTemp) cFilter = cFilter + " AND "+ ; "[.]+RIGHT(ALLTR(Executing),"+ ; ALLTR(STR(iPos))+") == ["+cTemp+"]" ELSE cTemp = PADR(ALLTR(cClass), COV_LEN_OBJCLASS) cFilter = "LOWER(Hostfile) = cHostfile AND " + ; "ProcLine = iProcLineNo AND " + ; "LOWER(ObjClass) = ["+cTemp+"]" * some of the cases below * may not be strictly necessary * however the RIGHT(...) one *is* necessary * and it's the only one I can't really optimize -- * the other ones are as optimized as they * can get depending on how intelligent * I can be about setting up the filter in * a given circumstance. * This un-optimized case also has to be *first* * among the non-VFP5 cases, * because of leaf object handling. DO CASE CASE "." $ cExecuting cTemp = ALLTR(cExecuting) IF "." $ cObject cTemp = "."+SUBSTR(ALLTR(cObject),RAT(".",ALLTR(cObject))+1)+"."+cTemp ENDIF iPos = LEN(cTemp) cFilter = cFilter + " AND "+ ; "RIGHT(ALLTR(Executing),"+ ; ALLTR(STR(iPos))+") == ["+cTemp+"]" CASE ALLTRIM(cObject) == ALLTRIM(cClass) cTemp = PADR(ALLTR(cClass)+"."+ALLTR(cExecuting), COV_LEN_EXECUTING) cFilter = cFilter+" AND "+ ; "LOWER(Executing) = ["+cTemp+"]" CASE "." $ cObject cTemp = PADR(ALLTR(cClass)+ ; ALLTR(SUBSTR(cObject,AT(".",cObject)))+ ; "."+ALLTR(cExecuting), COV_LEN_EXECUTING) cFilter = cFilter+" AND "+ ; "LOWER(Executing) = ["+cTemp+"]" OTHERWISE cTemp = PADR(ALLTR(cClass)+"."+ALLTR(cExecuting), COV_LEN_EXECUTING) cFilter = cFilter+" AND "+ ; "LOWER(Executing) = ["+cTemp+"]" ENDCASE ENDIF OTHERWISE && frx, lbx, sct cFilter = PADR(ALLTR(cObject)+"."+ALLTR(cExecuting),COV_LEN_EXECUTING) cFilter = "LOWER(Hostfile) = cHostfile AND " +; "LOWER(Executing) = ["+ cFilter +"] AND "+; "ProcLine = iProcLineNo" ENDCASE IF NOT ISNULL(iExecuted) SELECT (cSource) IF THIS.lInProfileMode LOCATE FOR &cFilter && first nFirst = Duration IF NOT EOF() CALCULATE AVG(Duration) FOR &cFilter ; TO nAverage iExecuted = _TALLY ELSE iExecuted = 0 ENDIF ELSE COUNT FOR &cFilter iExecuted = _TALLY ENDIF iLinesCovered = iLinesCovered + IIF(iExecuted = 0,0,1) iCoverableLines = iCoverableLines + 1 IF cFirstWord == "text" lInText = .T. ENDIF ENDIF * See COV_TUNE.H: the following is * tunable from a procedure call * to an IIF() offering a simple toggle, * based on the #DEFINE COV_TOPSPEED. * Because this line is going to be * called every time a line of code * is marked, speed is extremely important * here. * The actual call to which COV_MARK_CODE_LINE * defaults when COV_TOPSPEED is .F. is: * THIS.MarkCodeLine(cRealLine,iExecuted, nFirst, nAverage) * ... COV_TOPSPEED's in-line approach is * faster but less flexible for subclassers cMemo = cMemo + COV_MARK_CODE_LINE + C_CR ENDFOR IF NOT THIS.lError SELECT (cTarget) IF THIS.lInProfileMode REPLACE Profiled WITH cMemo ELSE REPLACE Marked WITH cMemo ENDIF IF EMPTY(Coverable) REPLACE Coverable WITH iCoverableLines, ; Covered WITH iLinesCovered ENDIF ENDIF SELECT (iSelect) RETURN NOT (EMPTY(cMemo) OR THIS.lError) ENDPROC PROCEDURE markcodeline LPARAMETERS tcLine,tiExecuted, tnFirst, tnAverage ASSERT TYPE("tcLine") = "C" ASSERT ISNULL(tiExecuted) OR TYPE("tiExecuted") = "N" ASSERT TYPE("tnFirst") = "N" ASSERT TYPE("tnAverage") = "N" * If we got a .null. in tiExecuted, this * will be a type of line that the * internally-generated log will never "see" -- * I want to clearly delineate * this problem so you can * decide how to handle it, and * also decide whether you want * to mark incidences rather than * not-executed, or mark executed * rather than not executed. * This is one of the reasons * why this code is pulled out * from MarkTargetCoverage(), * which you should * never need to touch. * You'll just need to have * the same CASES in your MarkCodeLine() * as you see below, * and treat each type of line as you wish: LOCAL cMarkedLine, cFirst, cAverage IF THIS.lInProfileMode IF ISNULL(tiExecuted) * will never be in the log cMarkedLine = SPACE(COV_PROFILE_EXECUTED_SPACING + ; COV_PROFILE_STATS_SPACING * 2) ELSE IF tiExecuted = 1 cMarkedLine = PADR(ALLTR(STR(tiExecuted))+ SPACE(1)+ ; COV_PROFILE_ONE_HIT_LOC, ; COV_PROFILE_EXECUTED_SPACING) ELSE cMarkedLine = PADR(ALLTR(STR(tiExecuted))+ SPACE(1)+ ; COV_PROFILE_HITS_LOC, ; COV_PROFILE_EXECUTED_SPACING) ENDIF cFirst = PADR(COV_PROFILE_MARK_1ST_LOC + SPACE(1) + ; ALLTR(STR(tnFirst,20,N_COVLOG_PRECISION)), ; COV_PROFILE_STATS_SPACING) cMarkedLine = cMarkedLine + cFirst cAverage = PADR(COV_PROFILE_MARK_AVG_LOC + SPACE(1) + ; ALLTR(STR(tnAverage,20,N_COVLOG_PRECISION)), ; COV_PROFILE_STATS_SPACING) cMarkedLine = cMarkedLine + cAverage ENDIF cMarkedLine = cMarkedLine + tcLine ELSE DO CASE CASE ISNULL(tiExecuted) * will never be in the log cMarkedLine = SPACE(LEN(THIS.cMarkExecuted)) + tcLine CASE tiExecuted = 0 cMarkedLine = THIS.cMarkNotExecuted + tcLine CASE tiExecuted > 0 cMarkedLine = THIS.cMarkExecuted + tcLine OTHERWISE * should never be negative! cMarkedLine = "" ENDCASE ENDIF RETURN cMarkedLine ENDPROC PROCEDURE getalias LPARAMETERS tAlias,tcWhichProp ASSERT PCOUNT() > 1 AND ; TYPE("tcWhichProp") = "C" AND ; INLIST(UPPER(tcWhichProp),COV_KNOWN_ALIAS_PROPERTIES) LOCAL cReturn IF TYPE("tAlias") = "C" cReturn = tAlias ELSE cReturn = EVAL("THIS.c"+tcWhichProp+"Alias") ENDIF RETURN cReturn ENDPROC PROCEDURE runaddin LPARAMETERS tcAddIn LOCAL lOkay, cFileToRun, cExt * Add-In must accept an object parameter, * reference to the Coverage form object * It may adjust the size of the Coverage form object * and add new controls to it. It may reset * the file that is going to be parsed according * to queries to the user of its own. It may choose * to adjust the Coverage form object's error flag * if it thinks the form shouldn't substantiate * based on its own errors, and provide its own * error messages stating the reason. IF TYPE("tcAddIn") = "C" cFileToRun = tcAddIn ELSE cFileToRun = THIS.cAddIn ENDIF IF EMPTY(cFileToRun) RETURN .T. ENDIF cFileToRun = UPPER(ALLTR(cFileToRun)) THIS.lError = .F. IF "." $ cFileToRun cExt = RIGHT(cFileToRun,4) ELSE cExt = "" ENDIF lOkay = .T. IF (NOT EMPTY(cExt)) AND ; EMPTY(SYS(2000,cFileToRun)) DO CASE CASE "\" $ cFileToRun lOkay = .F. CASE NOT EMPTY(SYS(2000,SUBSTR(THIS.ClassLibrary,1,RAT("\",THIS.ClassLibrary))+cFileToRun)) cFileToRun = SUBSTR(THIS.ClassLibrary,1,RAT("\",THIS.ClassLibrary))+cFileToRun CASE NOT (EMPTY(THIS.cAppHome) OR ; EMPTY(SYS(2000,SUBSTR(THIS.cAppHome,1,RAT("\",THIS.cAppHome))+cFileToRun))) cFileToRun = SUBSTR(THIS.cAppHome,1,RAT("\",THIS.cAppHome))+cFileToRun OTHERWISE lOkay = .F. ENDCASE IF NOT lOkay THIS.DoMessage(COV_ADDIN_DOES_NOT_EXIST_LOC, ; COV_STOP_MESSAGEBOX ) ENDIF ENDIF IF lOkay AND (NOT THIS.lError) DO CASE CASE EMPTY(cExt) IF FILE(cFileToRun+".FXP") OR ; FILE(cFileToRun+".APP") OR ; FILE(cFileToRun+".PRG") OR ; FILE(cFileToRun+".EXE") OR ; FILE(cFileToRun+".QPX") OR ; FILE(cFileToRun+".QPR") OR ; FILE(cFileToRun+".MPR") OR ; FILE(cFileToRun+".MPX") DO (cFileToRun) WITH THIS ELSE THIS.DoMessage(COV_ADDIN_DOES_NOT_EXIST_LOC, ; COV_STOP_MESSAGEBOX ) lOkay = .F. ENDIF CASE ( INLIST(cExt,".FXP",".APP",".PRG",".EXE",".QPX",".QPR",".MPR",".MPX")) DO (cFileToRun) WITH THIS CASE ( cExt = ".SCX" ) DO FORM (cFileToRun) WITH THIS OTHERWISE THIS.DoMessage(COV_ADDIN_NOT_SUPPORTED_TYPE_LOC, ; COV_STOP_MESSAGEBOX ) lOkay = .F. ENDCASE ENDIF IF THIS.lError OR (NOT lOkay) lOkay = .F. THIS.cAddIn = "" ELSE lOkay = .T. THIS.cAddIn = LOWER(cFileToRun) ENDIF THIS.lError = .F. IF THIS.lUsingRegistry DO CASE CASE lOkay AND THIS.lRegisterAddIn THIS.AddRegisteredAddin(cFileToRun) CASE NOT lOkay && whether registry is in use or not THIS.DeleteRegisteredAddIn(cFileToRun) OTHERWISE * registry may be in use but we're not registering * this particular file ENDCASE ENDIF RETURN lOkay ENDPROC PROCEDURE filterlistbylocation * abstract in the engine, but doesn't have to be * ... could be: * SELECT all objects UNION all procs * represented in the file * and ask which ones should be surveyed RETURN NOT THIS.lError ENDPROC PROCEDURE orderlistbytime * INDEX ON Duration field, and SET ORDER * TO this index if a checkbox in the list * asks for this option? * abstract in the engine but doesn't have to be RETURN NOT THIS.lError ENDPROC PROCEDURE setclasslibtoalias LPARAMETERS tcClassLibName, tcAppName * note: this code is not necessary in VFP 6 or above IF EMPTY(tcClassLibName) * library is already set or * the calling program knows it doesn't need to * be set -- for example, the class def could be * appended into the main program but the * call is a #DEFINE. RETURN "" ENDIF LOCAL cAlias, cLibList, cClassLibName, cAppName, cSys16, iLevel cLibList = SET("CLASSLIB") cLibList = CHRTRANC(m.cLibList,["],"") cAlias = "" cAppName = tcAppName cClassLibName = tcClassLibName IF AT(".",cClassLibName) = 0 cClassLibName = cClassLibName+".VCX" ENDIF IF ATC(cClassLibName+" ALIAS ", cLibList) = 0 AND ; ATC(cClassLibName+ " IN ",cLibList) = 0 cAlias = "c"+SYS(2015) IF EMPTY(cAppName) SET CLASSLIB TO (cClassLibName) ALIAS (cAlias) ADDITIVE ELSE SET CLASSLIB TO (cClassLibName) IN (cAppName) ALIAS (cAlias) ADDITIVE ENDIF ELSE * library is already loaded -- * we want to make sure not to * try to RELEASE it and also not * to alter its current ALIAS. ENDIF RETURN cAlias ENDPROC PROCEDURE setworkoptions THIS.lStartInProfileMode = ; THIS.GetRegistryKeyValue("ProfileMode", THIS.lStartInProfileMode) THIS.lSmartPath = ; THIS.GetRegistryKeyValue("SmartPath", THIS.lSmartPath) THIS.lMarkAllOnLoad = ; THIS.GetRegistryKeyValue("MarkAll", THIS.lMarkAllOnLoad) THIS.cMarkExecuted = ; THIS.GetRegistryKeyValue("MarkExecuted", THIS.cMarkExecuted) THIS.cMarkNotExecuted = ; THIS.GetRegistryKeyValue("MarkNotExecuted", THIS.cMarkNotExecuted) THIS.lRegisterAddIn = ; THIS.GetRegistryKeyValue("RegisterAddIn",THIS.lRegisterAddIn) THIS.lInCoverageFrame = ; THIS.GetRegistryKeyValue("CoverageFrame",THIS.lInCoverageFrame) THIS.lStackXMLExtendedTree = ; THIS.GetRegistryKeyValue("StackXMLExtendedTree",THIS.lStackXMLExtendedTree) THIS.cStackXSLT = ; THIS.GetRegistryKeyValue("StackXSLT",THIS.cStackXSLT) THIS.SetMarks() RETURN NOT THIS.lError ENDPROC PROCEDURE getfontsfromuser LPARAMETERS tlBaseMonoFont, toMemberHost * second parameter will allow you to switch * easily to a toolbar member when necessary or * useful -- .Forms(1) default will also allow * a failsafe container for the control * in case anything happens to the toolbar, you're * using multiple main dialogs and close the first one, etc. * Note: this method is not called in the * engine, but is expected to be required by * any user-driven options dialog. * The engine maintains two sets of font attributes * one for a "Coverage display font" and one for * the "monospace font" one needs for effective * display of marked code. However, it doesn't * actually use these fonts anywhere -- it just * makes them available since any subclass is * going to require them. * A .F. return should stop the calling * function from attempting to set UI font attributes. ASSERT NOT THIS.lUnattended ASSERT TYPE("tlBaseMonoFont") = "L" LOCAL oMemberHost, lFontChange, cProp, cGetFont, iPos1, ; iPos2, cAlias, cLibs, iHostControlCount, liOldSys2333 IF TYPE("toMemberHost.Class") = "C" oMemberHost = toMemberHost ELSE IF THIS.lInCoverageFrame oMemberHost = THIS.oFrame ELSE oMemberHost = THIS.Forms(1) ENDIF ENDIF iHostControlCount = oMemberHost.ControlCount IF tlBaseMonoFont cProp = "Mono" ELSE cProp = "" ENDIF IF THIS.lUsingOCXs IF TYPE("oMemberHost.cdlCov_GetFont.Class") = "U" * add common dialog if this is the first time: THIS.lError = .F. cLibs = SET("CLASSLIB") * the following * may not be necessary for the fonts * invocation of the common dialog control, * unlike the file-setting invocations in * GetResourceLocation, but it can't hurt IF THIS.lVFP5 liOldSYS2333 = 0 ELSE liOldSYS2333 = VAL(SYS(2333,2)) ENDIF IF THIS.lVFP5 OR liOldSYS2333 # 0 SYS(2333,0) ENDIF #IF COV_COMPILED_IN_VFP5 cAlias = THIS.SetClassLibToAlias(COV_BASE_CLASSLIB, THIS.cAppName) oMemberHost.AddObject("cdlCov_GetFont",cAlias+"."+COV_COMMON_DIALOG_CLASS) #ELSE oMemberHost.NewObject("cdlCov_GetFont",COV_COMMON_DIALOG_CLASS,COV_BASE_CLASSLIB,THIS.cAppName) #ENDIF IF liOldSYS2333 # 0 SYS(2333,liOldSYS2333) ENDIF IF NOT EMPTY(cAlias) AND ; (ATC("ALIAS "+cAlias, SET("CLASSLIB")) > 0) RELEASE CLASSLIB ALIAS (cAlias) SET CLASSLIB TO &cLibs ENDIF IF THIS.lError OR oMemberHost.ControlCount = iHostControlCount WAIT WINDOW ; LEFT(COV_SWITCHING_OFF_COMMON_DIALOG_LOC+"...",COV_MESSAGE_LIMIT) ; TIMEOUT COV_TIMEOUT_SECS THIS.lUsingOCXs = .F. THIS.lError = .F. ENDIF ENDIF ENDIF IF THIS.lUsingOCXs WITH oMemberHost.cdlCov_GetFont .Flags = cdlCFScreenFonts + ; cdlCFANSIOnly + ; cdlCFForceFontExist IF tlBaseMonoFont .Flags = .Flags + cdlCFFixedPitchOnly ENDIF .FontName = EVAL("THIS.cBase"+cProp+"FontName") .FontSize = EVAL("THIS.nBase"+cProp+"FontSize") .FontBold = EVAL("THIS.lBase"+cProp+"FontBold") .FontItalic = EVAL("THIS.lBase"+cProp+"FontItalic") ENDWITH IF ! oMemberHost.Visible * set up a reasonable position for the dialog: oMemberHost.Top = _SCREEN.Height/4 oMemberHost.Left = _SCREEN.WIDTH/4 ENDIF oMemberHost.cdlCov_GetFont.ShowFont() lFontChange = NOT( (EVAL("THIS.cBase"+cProp+"FontName") == ; oMemberHost.cdlCov_GetFont.FontName) AND ; (EVAL("THIS.nBase"+cProp+"FontSize") = ; oMemberHost.cdlCov_GetFont.FontSize) AND ; (EVAL("THIS.lBase"+cProp+"FontBold") = ; oMemberHost.cdlCov_GetFont.FontBold) AND ; (EVAL("THIS.lBase"+cProp+"FontItalic") = ; oMemberHost.cdlCov_GetFont.FontItalic)) IF lFontChange AND NOT THIS.lError STORE oMemberHost.cdlCov_GetFont.FontName TO ("THIS.cBase"+cProp+"FontName") STORE oMemberHost.cdlCov_GetFont.FontSize TO ("THIS.nBase"+cProp+"FontSize") STORE oMemberHost.cdlCov_GetFont.FontBold TO ("THIS.lBase"+cProp+"FontBold") STORE oMemberHost.cdlCov_GetFont.FontItalic TO ("THIS.lBase"+cProp+"FontItalic") ENDIF ELSE * MESSAGEBOX(COV_FEATURE_NEEDS_OCX_LOC, COV_STOP_MESSAGEBOX) * RETURN .F. * this is an extra restriction, * which may be added if you wish to * stop proportional fonts from being picked for code, * since GETFONT() doesn't allow this restriction in the * same way that the OCX does. However, allowing the * user to pick proportional fonts for code in the * coverage dialogs is no different from allowing * proportional fonts for a MODI COMM -- it's basically * the user's right, even if it does drive him/her crazy ! cGetFont = GETFONT() IF NOT EMPTY(cGetFont) lFontChange = .T. iPos = AT(",",cGetFont) STORE SUBSTR(cGetFont,1,iPos-1) TO ("THIS.cBase"+cProp+"FontName") cGetFont = SUBSTR(cGetFont,iPos+1) iPos = AT(",",cGetFont) STORE VAL(SUBSTR(cGetFont,1,iPos-1)) TO ("THIS.nBase"+cProp+"FontSize") cGetFont = SUBSTR(cGetFont,iPos+1) STORE ("B" $ cGetFont) TO ("THIS.lBase"+cProp+"FontBold") STORE ("I" $ cGetFont) TO ("THIS.lBase"+cProp+"FontItalic") ENDIF ENDIF RETURN lFontChange AND NOT THIS.lError ENDPROC PROCEDURE setregistrykeyvalue LPARAMETERS tcWhichOption, tValue IF (NOT THIS.lUsingRegistry) OR ; TYPE("THIS.cov_toolbar.cusRegistry.Class") # "C" RETURN ENDIF LOCAL cPath, cTypeValue, cValue *!* IF THIS.lVFP5 *!* cPath = VFP5_KEYPATH *!* ELSE *!* cPath = VFP6_KEYPATH *!* ENDIF cPath = VFP_KEYPATH cPath = cPath + VFP_COVERAGE_KEY cTypeValue = TYPE("tValue") DO CASE CASE cTypeValue = "C" cValue = tValue CASE cTypeValue = "N" cValue = ALLTR(STR(tValue)) CASE cTypeValue = "L" AND tValue cValue = ".T." CASE cTypeValue = "L" cValue = ".F." OTHERWISE * ?? cValue = "" ENDCASE THIS.cov_toolbar.cusRegistry.SetRegKey(tcWhichOption, ; cValue, ; cPath, ; HKEY_CURRENT_USER) RETURN NOT THIS.lError ENDPROC PROCEDURE getregistrykeyvalue LPARAMETERS tcOption, tDefaultValue, tcPath LOCAL cValue, vReturn, cPath, cTypeValue, cTypeRegValue IF THIS.lUsingRegistry AND TYPE("THIS.cov_toolbar.cusRegistry.Class") = "C" cTypeValue = TYPE("tDefaultValue") DO CASE CASE cTypeValue = "C" cValue = tDefaultValue CASE cTypeValue = "N" cValue = ALLTR(STR(tDefaultValue)) CASE cTypeValue = "L" AND tDefaultValue cValue = ".T." CASE cTypeValue = "L" cValue = ".F." OTHERWISE * ?? cValue = "" ENDCASE IF EMPTY(tcPath) OR PCOUNT() < 3 cPath = VFP_COVERAGE_KEY ELSE cPath = tcPath ENDIF *!* IF THIS.lvfp5 *!* cPath = VFP5_KEYPATH + cPath *!* ELSE *!* cPath = VFP6_KEYPATH + cPath *!* ENDIF cPath = VFP_KEYPATH + cPath THIS.cov_toolbar.cusRegistry.GetRegKey(tcOption, @cValue,cPath,HKEY_CURRENT_USER) cTypeRegValue = TYPE(cValue) IF THIS.lError OR ; (cTypeRegValue # "U" AND ; cTypeValue # cTypeValue) * the latter condition should only happen * if somebody monkeyed around with the registry... vReturn = tDefaultValue THIS.lError = .F. ELSE IF cTypeRegValue # "U" vReturn = EVAL(cValue) ELSE vReturn = cValue ENDIF ENDIF ELSE vReturn = tDefaultValue ENDIF RETURN vReturn ENDPROC PROCEDURE getresourcelocation LPARAMETERS tcHost, tcTitle, tcCDLFilter , tcFileName, tcWhichDialog, toMemberHost ASSERT PCOUNT() >=5 ASSERT OCCURS("|", tcCDLFilter) > 0 ASSERT TYPE("tcWhichDialog") = "C" AND ; INLIST(UPPER(tcWhichDialog),"PUTFILE","GETFILE") * currently known types & available subclasses of * coverage common dialog class -- * may add showhelp()... * and there might be additional file-setting OCXs or * other possibilities that would be useful here -- * if so, the tcCDLFilter ASSERTion above would change IF THIS.lUnattended IF TYPE("tcFileName") = "C" RETURN LOWER(tcFileName) ELSE RETURN "" ENDIF ENDIF LOCAL oMemberHost, nPos, cReturn, cDialogControl, liOldSYS2333, ; oDialogControl, cAlias, cFoxFilter, cWhichDialog, iSetPointer, cLibs, ; iHostControlCount iSetPointer = _SCREEN.MousePointer IF TYPE("toMemberHost.Class") = "C" oMemberHost = toMemberHost ELSE IF THIS.lInCoverageFrame oMemberHost = THIS.oFrame ELSE oMemberHost = THIS.Forms(1) ENDIF ENDIF * see note on memberhost parameter in GetFontFromUser() method iHostControlCount = oMemberHost.ControlCount cWhichDialog = ALLTR(UPPER(tcWhichDialog)) IF THIS.lUsingOCXs cDialogControl = "cdlCov_"+cWhichDialog IF TYPE("oMemberHost."+cDialogControl+".Class") = "U" * add common dialog if this is the first time: THIS.lError = .F. cLibs = SET("CLASSLIB") * the following is required for * the common file dialog at least * in this subclass... IF THIS.lVFP5 liOldSYS2333 = 0 ELSE liOldSYS2333 = VAL(SYS(2333,2)) ENDIF IF THIS.lVFP5 OR liOldSYS2333 # 0 SYS(2333,0) ENDIF #IF COV_COMPILED_IN_VFP5 cAlias = THIS.SetClassLibToAlias(COV_BASE_CLASSLIB, THIS.cAppName) oMemberHost.AddObject(cDialogControl,cAlias+"."+COV_COMMON_FILE_DIALOG_CLASS) #ELSE oMemberHost.NewObject(cDialogControl,COV_COMMON_FILE_DIALOG_CLASS, COV_BASE_CLASSLIB, THIS.cAppName) #ENDIF IF liOldSYS2333 # 0 SYS(2333,liOldSYS2333) ENDIF IF NOT EMPTY(cAlias) AND ; (ATC("ALIAS "+cAlias, SET("CLASSLIB")) > 0) RELEASE CLASSLIB ALIAS (cAlias) SET CLASSLIB TO &cLibs ENDIF IF THIS.lError OR (oMemberHost.ControlCount = iHostControlCount) WAIT WINDOW ; LEFT(COV_SWITCHING_OFF_COMMON_DIALOG_LOC+"...",COV_MESSAGE_LIMIT) ; TIMEOUT COV_TIMEOUT_SECS THIS.lUsingOCXs = .F. THIS.lError = .F. ELSE WITH oMemberHost.&cDialogControl. DO CASE CASE cWhichDialog = "PUTFILE" .Flags = .Flags + cdlOFNNoReadOnlyReturn + ; cdlOFNOverwritePrompt CASE cWhichDialog = "GETFILE" .Flags = .Flags + cdlOFNFileMustExist OTHERWISE * see comment and ASSERTed list of known dlgs above ENDCASE ENDWITH ENDIF ENDIF ENDIF nPos = RAT("\",tcHost) cReturn = "" IF THIS.lUsingOCXs oDialogControl = EVAL("oMemberHost."+cDialogControl) WITH oDialogControl .DialogTitle = tcTitle IF NOT EMPTY(tcHost) .DialogTitle = .DialogTitle + ; " "+SUBSTR(tcHost,nPos+1) ENDIF IF TYPE("tcFileName") = "C" .FileName = tcFileName ELSE .FileName = "" ENDIF .Filter = tcCDLFilter .FilterIndex = 0 IF nPos > 0 .InitDir = SUBSTR(tcHost,1,nPos) * Setting the .lForceSearch * property of a cov_commonfiledialg * subclass to .T. will override this * and set to "", or this * method could set .lForceSearch * true here to force the same effect * at runtime. ENDIF ENDWITH IF !oMemberHost.Visible * set up a reasonable position for the dialog: oMemberHost.Top = _SCREEN.Height/4 oMemberHost.Left = _SCREEN.WIDTH/4 ENDIF DO CASE CASE cWhichDialog = "PUTFILE" oDialogControl.SHOWSAVE() CASE cWhichDialog = "GETFILE" oDialogControl.SHOWOPEN() OTHERWISE * see comment and ASSERTed list of known dlgs above ENDCASE cReturn = ALLTR(oDialogControl.FileName) ELSE WAIT WINDOW NOWAIT LEFT(tcTitle + ; IIF(EMPTY(tcHost),"",C_CR + SUBSTR(tcHost,nPos+1)), ; COV_MESSAGE_LIMIT) cFoxFilter = STRTRAN(tcCDLFilter,"*.","") IF OCCURS("|",cFoxFilter) > 1 cFoxFilter = LEFT(cFoxFilter,AT("|",cFoxFilter,2)-1) ENDIF DO CASE CASE cWhichDialog = "PUTFILE" cFoxFilter = SUBSTR(cFoxFilter,AT("|",cFoxFilter)+1) cFoxFilter = STRTRAN(cFoxFilter,";","|") cReturn = PUTFILE("",IIF(EMPTY(tcFileName),"",tcFileName),cFoxFilter) * A confirmation of overwrite if the file already exists * is done automatically, whether SAFETY is ON or OFF. CASE cWhichDialog = "GETFILE" cFoxFilter = STRTRAN(cFoxFilter,";",",") cFoxFilter = STRTRAN(cFoxFilter,"|",":") cReturn = GETFILE(cFoxFilter,"",COV_GETFILE_BUTTON_LOC) * file *must* exist, and we have to handle this manually: IF NOT EMPTY(cReturn) cReturn = FULLPATH(cReturn) IF EMPTY(SYS(2000,cReturn)) cReturn = "" THIS.DoMessage(COV_FILE_DOES_NOT_EXIST_LOC, ; COV_STOP_MESSAGEBOX) ENDIF ENDIF OTHERWISE * see comment and ASSERTed list of known dlgs above ENDCASE WAIT CLEAR ENDIF IF iSetPointer # 0 _SCREEN.SetAll("MousePointer",iSetPointer) _SCREEN.MousePointer = iSetPointer ENDIF RETURN LOWER(cReturn) ENDPROC PROCEDURE fillcoveragefilenamecursor * this is a sketch in the engine... * the basic records required by this * cursor are just hardcoded as INSERTs. * You can have a different * system of filling in * subclasses, for example they can be * SELECTed from a lookup table * of filenames, either by augmenting * this method or using * the AdjustCoverageFilenameCursor() * method that it calls * (for consistency with the other * coverage table methods). * You can write a little maintenance procedure * that scans your COVERAGE.PJX * puts all relevant filenames * into such a lookup table, or * into a TEXTMERGEd PRG of INSERTs. INSERT INTO (THIS.ccovfilesalias) ; VALUES ("COVERAGE.FXP") INSERT INTO (THIS.ccovfilesalias) ; VALUES ("COVERAGE.VCT") INSERT INTO (THIS.ccovfilesalias) ; VALUES ("COVERAGE.APP") INSERT INTO (THIS.ccovfilesalias) ; VALUES ("COV_PJX.FRT") THIS.AdjustCoverageFilenameCursor() RETURN NOT THIS.lError ENDPROC PROCEDURE togglecoverageprofilemode LPARAMETERS tcSource,tcTarget LOCAL cTarget, iSelect, iRecNo, cOrder THIS.lInProfileMode = ! THIS.lInProfileMode THIS.ShowStatus(COV_EMPTYING_ALL_RECORDS_LOC) iSelect = SELECT() cTarget = THIS.GetAlias(tcTarget,"Target") SELECT (cTarget) iRecNo = IIF(EOF(),0,RECNO()) cOrder = ORDER() SET ORDER TO 0 IF THIS.lMarkAllOnLoad THIS.MarkAllTargetRecords(tcSource, cTarget) ENDIF IF iRecNo = 0 LOCATE ELSE GO iRecNo ENDIF SET ORDER TO (cOrder) SELECT (iSelect) THIS.ClearStatus() RETURN NOT THIS.lError ENDPROC PROCEDURE showstatistics * abstract in the engine by design RETURN NOT THIS.lError ENDPROC PROCEDURE showprojectstatistics LPARAMETERS tcSource, tcTarget, tcProject LOCAL lReturn lReturn = THIS.GetProjectStatistics(tcSource,tcTarget, tcProject) IF lReturn lReturn = THIS.DisplayProjectStatistics(tcSource,tcTarget,tcProject) ENDIF RETURN lReturn AND NOT THIS.lError ENDPROC PROCEDURE getprojectstatistics LPARAMETERS tcSource, tcTarget, tcProject LOCAL iSelect, cDefault, cOrder, cTarget, ; cPJXFile, cPJXAlias, cProject, lReturn, cFile, ; iCovered, iCoverable, iObjTotal, iObjHits, cFileType THIS.lError = .F. cPJXAlias = "" cTarget = THIS.GetAlias(tcTarget,"Target") cProject = THIS.GetAlias(tcProject,"Project") cPJXFile = THIS.GetResourceLocation("", ; COV_GETPROJECTFILE_TITLE_LOC, ; COV_PROJECTSONLY_LOC+" (*.pjx)|*.pjx", ; "", ; "getfile" ) IF USED(cProject) USE IN (cProject) ENDIF *!* CREATE CURSOR (cProject) ; *!* (Hostfile c(COV_LEN_HOSTFILE), ; *!* FileType c(4), ; *!* Coverable n(8), ; *!* Covered n(8), ; *!* ObjTotal n(8), ; *!* ObjHits n(8)) CREATE CURSOR (cProject) ; (Hostfile c(COV_LEN_HOSTFILE), ; FileType c(4), ; Coverable i, ; Covered i, ; ObjTotal i, ; ObjHits i) IF NOT EMPTY(cPJXFile) cPJXAlias = "P"+SYS(2015) USE (cPJXFile) ALIAS (cPJXAlias) AGAIN SHARED IN 0 IF NOT THIS.lError iSelect = SELECT() cDefault = SET("DIRECTORY") cOrder = ORDER(cTarget) SELECT (cPJXAlias) CD (SUBSTR(cPJXFile,1,RAT("\",cPJXFile))) SET ORDER TO Standard IN (cTarget) SET RELATION TO ; PADR(LOWER(ALLTR(FULLPATH(ALLTR(STRTRAN(; IIF(EMPTY(Outfile),Name,Outfile),CHR(0),""))))), ; COV_LEN_HOSTFILE) ; INTO (cTarget) SET Filter TO INLIST(TYPE,COV_KNOWN_PJX_TYPES) LOCATE IF EOF() MESSAGEBOX(COV_NO_USABLE_PROJECT_RECORDS_LOC, ; COV_STOP_MESSAGEBOX) USE IN (cPJXAlias) ELSE * create a header record INSERT INTO (cProject) (Hostfile) VALUES (cPJXFile) * now check project records of known types: SCAN ALL cFile = PADR(LOWER(ALLTR(FULLPATH(ALLTR(STRTRAN(; IIF(EMPTY(Outfile),Name,Outfile),CHR(0),""))))), ; COV_LEN_HOSTFILE) IF EOF(cTarget) INSERT INTO (cProject) (Hostfile) ; VALUES (cFile) ELSE SELECT (cTarget) THIS.MarkOneTargetRecord(tcSource, cTarget, .T.) cFileType = FileType iObjTotal = ObjTotal iObjHits = ObjHits STORE 0 TO iCovered, iCoverable SCAN WHILE Hostfile = cFile THIS.MarkOneTargetRecord(tcSource, cTarget, .T.) iCovered = iCovered + Covered iCoverable = iCoverable + Coverable ENDSCAN INSERT INTO (cProject) ; (Hostfile, FileType, Covered, Coverable, ObjHits, ObjTotal) ; VALUES ; (cFile, cFileType, iCovered, iCoverable, iObjHits, iObjTotal) ENDIF ENDSCAN ENDIF SELECT (iSelect) CD (cDefault) SET ORDER TO (cOrder) IN (cTarget) GO Top IN (cTarget) THIS.Refresh() IF USED(cPJXAlias) USE IN (cPJXAlias) IF NOT THIS.lError lReturn = .T. ENDIF ENDIF ELSE THIS.lError = .F. MESSAGEBOX(COV_PROJECT_UNAVAILABLE_LOC,COV_STOP_MESSAGEBOX) ENDIF ENDIF RETURN lReturn ENDPROC PROCEDURE displayprojectstatistics LPARAMETERS tcSource, tcTarget, tcProject * abstract in the engine by design RETURN NOT THIS.lError ENDPROC PROCEDURE setfontvalues LOCAL iSelect, cResource, cMonoFontString THIS.cBaseFontName = ; THIS.GetRegistryKeyValue("BaseFontName", PROPER(COV_DEFAULT_BASE_FONTNAME)) THIS.nBaseFontSize = ; THIS.GetRegistryKeyValue("BaseFontSize", THIS.nBaseFontSize) THIS.lBaseFontBold = ; THIS.GetRegistryKeyValue("BaseFontBold", THIS.lBaseFontBold) THIS.lBaseFontItalic = ; THIS.GetRegistryKeyValue("BaseFontItalic", THIS.lBaseFontItalic) THIS.nBaseMonoFontSize = ; THIS.GetRegistryKeyValue("BaseMonoFontSize", THIS.nBaseMonoFontSize) THIS.lBaseMonoFontBold = ; THIS.GetRegistryKeyValue("BaseMonoFontBold", THIS.lBaseMonoFontBold ) THIS.lBaseMonoFontItalic = ; THIS.GetRegistryKeyValue("BaseMonoFontItalic", THIS.lBaseMonoFontItalic) * Do the monospace fontname differently * from other font defaults: * Don't set a default registry value * if none has previously been saved by * the user. Instead, try to get default * code font from the editor records in * the resource file and, if that fails, * try to get it from the registry's key for * the Trace window font cMonoFontString = ; THIS.GetRegistryKeyValue("BaseMonoFontName", "") IF EMPTY(cMonoFontString) * no previous key value iSelect = SELECT() cResource = SET("RESOURCE",1) IF NOT EMPTY(SYS(2000,cResource)) SELECT 0 USE (cResource) ALIAS Temp AGAIN SHARED IF NOT THIS.lError GO BOTTOM DO WHILE NOT BOF() IF ID = "WINDMODIFY" AND ; ".prg" $ LOWER(Name) cMonoFontString = ALLTR(LOWER(Data)) cMonoFontString = SUBSTR(cMonoFontString,51) cMonoFontString = SUBSTR(cMonoFontString,1, ; AT(CHR(0),cMonoFontString)-1) EXIT ELSE SKIP -1 ENDIF ENDDO ELSE THIS.lError = .F. ENDIF USE SELECT (iSelect) ENDIF IF EMPTY(cMonoFontString) * didn't get an answer from the resource file * so use the Trace window default: IF THIS.lUsingRegistry cMonoFontString = ; THIS.GetRegistryKeyValue("TraceFontName","",VFP_OPTIONS_KEY) ENDIF ENDIF ENDIF IF NOT EMPTY(cMonoFontString) THIS.cBaseMonoFontName = PROPER(cMonoFontString) ELSE * court of last resort if no other option pans out: THIS.cBaseMonoFontName = PROPER(COV_DEFAULT_MONO_FONTNAME) ENDIF RETURN NOT THIS.lError ENDPROC PROCEDURE lockscreens LPARAMETERS tlOn IF tlOn THIS.SetAll("LockScreen",.T.) _SCREEN.SetAll("MousePointer",11) _SCREEN.MousePointer = 11 ELSE THIS.SetAll("LockScreen",.F.) _SCREEN.SetAll("MousePointer",0) _SCREEN.MousePointer = 0 ENDIF ENDPROC PROCEDURE getregisteredaddins IF THIS.lUsingRegistry LOCAL cAddInName, iAddInNumber cAddInName = "" iAddInNumber = 1 cAddInName = THIS.GetRegistryKeyValue("AddIn1","") DO WHILE NOT EMPTY(cAddInName) DIME THIS.aAddIns[iAddInNumber] THIS.aAddIns[iAddInNumber] = cAddInName iAddInNumber = iAddInNumber + 1 cAddInName = THIS.GetRegistryKeyValue("AddIn"+ALLTR(STR(iAddInNumber)),"") ENDDO ENDIF RETURN NOT THIS.lError ENDPROC PROCEDURE showstatus LPARAMETERS cMessage IF NOT EMPTY(cMessage) THIS.lUsingStatusBar = ; ( (SET("STATUS BAR") = "ON") AND ; ( (NOT THIS.lInCoverageFrame) OR ; THIS.lUnattended) ) IF THIS.lUsingStatusBar SET MESSAGE TO LEFT(cMessage,COV_MESSAGE_LIMIT) ELSE WAIT WINDOW NOWAIT LEFT(cMessage,COV_MESSAGE_LIMIT) ENDIF ENDIF RETURN NOT THIS.lError ENDPROC PROCEDURE clearstatus IF THIS.lUsingStatusBar SET MESSAGE TO "" ELSE WAIT CLEAR ENDIF RETURN NOT THIS.lError ENDPROC PROCEDURE markalltargetrecords LPARAMETERS tcSource, tcTarget LOCAL cSource, cTarget, iSelect, iRecNo, cOrder ASSERT (EMPTY(tcSource) OR ; (TYPE("tcSource") = "C" AND USED(tcSource))) AND ; (EMPTY(tcTarget) OR ; (TYPE("tcTarget") = "C" AND USED(tcTarget))) THIS.ShowStatus(COV_MARKING_ALL_RECORDS_LOC) iSelect = SELECT() IF EMPTY(tcSource) cSource = THIS.GetAlias(tcSource,"Source") cTarget = THIS.GetAlias(tcTarget,"Target") ELSE cSource = tcSource cTarget = tcTarget ENDIF SELECT (cTarget) iRecNo = IIF(EOF(),0,RECNO()) cOrder = ORDER() SET ORDER TO Standard LOCATE SCAN THIS.MarkOneTargetRecord(cSource,cTarget, .T.) ENDSCAN IF iRecNo = 0 LOCATE ELSE GO iRecNo ENDIF SET ORDER TO (cOrder) SELECT (iSelect) THIS.ClearStatus() RETURN NOT THIS.lError ENDPROC PROCEDURE filltargetcursor LPARAMETERS tcSource, tcTarget LOCAL cSource, cTarget, iSelect, cOrder, cFile ASSERT (EMPTY(tcSource) OR ; (TYPE("tcSource") = "C" AND USED(tcSource))) AND ; (EMPTY(tcTarget) OR ; (TYPE("tcTarget") = "C" AND USED(tcTarget))) THIS.LockScreens(.T.) THIS.ShowStatus(COV_FILLING_ALL_RECORDS_LOC) iSelect = SELECT() IF EMPTY(tcSource) cSource = THIS.GetAlias(tcSource,"Source") cTarget = THIS.GetAlias(tcTarget,"Target") ELSE cSource = tcSource cTarget = tcTarget ENDIF SELECT (cTarget) cOrder = ORDER() SET ORDER TO Hostfile LOCATE SCAN * third param will keep the source * file open in case we can keep using it * for multiple records THIS.FillOneTargetRecord(cSource,cTarget, .T.) ENDSCAN IF USED("Temp") * close any final source file USE IN Temp ENDIF SELECT (cTarget) DELETE FOR EMPTY(SourceCode) SELE Hostfile, COUNT(*) AS ObjHits FROM (cTarget) ; GROUP BY Hostfile ; INTO CURSOR Temp SELECT Temp INDEX ON Hostfile TAG Hostfile SELECT (cTarget) SET RELATION TO Hostfile INTO Temp LOCATE DO WHILE NOT EOF() IF INLIST(FileType,".vct",".sct", ".frt", ".lbt") cFile = Hostfile REPLACE ObjHits WITH Temp.ObjHits ; WHILE Hostfile == cFile ELSE SKIP ENDIF ENDDO COUNT FOR NOT DELETED() THIS.iTargetReccount = _TALLY USE IN Temp SET ORDER TO (cOrder) LOCATE SELECT (iSelect) THIS.ClearStatus() THIS.LockScreens(.F.) RETURN (THIS.iTargetReccount > 0 AND NOT THIS.lError) ENDPROC PROCEDURE markonetargetrecord LPARAMETERS tcSource, tcTarget, tlFillingAll LOCAL lReturn, cTarget, cObject cTarget = THIS.GetAlias(tcTarget,"Target") DO CASE CASE EMPTY(&cTarget..Hostfile) * Problem ! CASE THIS.lInProfileMode AND NOT EMPTY(&cTarget..Profiled) lReturn = .T. CASE (NOT THIS.lInProfileMode) AND (NOT EMPTY(&cTarget..Marked)) lReturn = .T. OTHERWISE THIS.LockScreens(.T.) cObject = ALLTR(&cTarget..ObjClass) cObject = SUBSTR(cObject,AT("!",cObject)+1) THIS.ShowStatus(COV_MARKING_SOURCE_FOR_LOC+" "+ ; ALLTR(&cTarget..Hostfile)+"."+ ; ALLTR(cObject)+"...") lReturn = THIS.MarkTargetCoverage(tcSource,cTarget) IF NOT lReturn DELETE IN (cTarget) IF NOT tlFillingAll GO Top IN (cTarget) THIS.DoMessage(COV_NO_COVERABLE_CODE_LOC+C_DOUBLE_CR,; COV_STOP_MESSAGEBOX) ENDIF ENDIF THIS.ClearStatus() THIS.LockScreens(.F.) ENDCASE RETURN lReturn AND (NOT THIS.lError) ENDPROC PROCEDURE addregisteredaddin LPARAMETER tcFileToAdd ASSERT TYPE("tcFileToAdd") = "C" ASSERT NOT EMPTY(SYS(2000,tcFileToAdd)) LOCAL iAddInCount, cFileToAdd, lFound cFileToAdd = LOWER(tcFileToAdd) SET EXACT ON IF ASCAN(THIS.aAddIns,cFileToAdd) = 0 * look for a previously-emptied one to fill: iAddInCount = 1 FOR iAddInCount = 1 TO ALEN(THIS.aAddIns) lFound = EMPTY(THIS.aAddIns[iAddInCount]) OR ; (TYPE(THIS.aAddIns[iAddInCount]) = "C" AND ; EMPTY(EVAL(THIS.aAddIns[iAddInCount]))) IF lFound EXIT ENDIF ENDFOR IF NOT lFound iAddInCount = iAddInCount + 1 DIME THIS.aAddIns[iAddInCount] ENDIF THIS.aAddIns[iAddInCount] = cFileToAdd ENDIF SET EXACT OFF RETURN NOT THIS.lError ENDPROC PROCEDURE saveoptionstoregistry IF THIS.lUsingRegistry * allow writes, since we only go against * current user's Coverage keys * save work options THIS.SetRegistryKeyValue("ProfileMode", THIS.lStartInProfileMode) THIS.SetRegistryKeyValue("SmartPath", THIS.lSmartPath) THIS.SetRegistryKeyValue("MarkAll", THIS.lMarkAllOnLoad) THIS.SetRegistryKeyValue("MarkExecuted", THIS.cMarkExecuted) THIS.SetRegistryKeyValue("MarkNotExecuted", THIS.cMarkNotExecuted) THIS.SetRegistryKeyValue("RegisterAddIn",THIS.lRegisterAddIn) THIS.SetRegistryKeyValue("StackXSLT",THIS.cStackXSLT) THIS.SetRegistryKeyValue("StackXMLExtendedTree", THIS.lStackXMLExtendedTree) * save font options THIS.SetRegistryKeyValue("BaseFontName", THIS.cBaseFontName) THIS.SetRegistryKeyValue("BaseFontSize", THIS.nBaseFontSize) THIS.SetRegistryKeyValue("BaseFontBold", THIS.lBaseFontBold) THIS.SetRegistryKeyValue("BaseFontItalic", THIS.lBaseFontItalic) THIS.SetRegistryKeyValue("BaseMonoFontName",THIS.cBaseMonoFontName) THIS.SetRegistryKeyValue("BaseMonoFontSize", THIS.nBaseMonoFontSize) THIS.SetRegistryKeyValue("BaseMonoFontBold", THIS.lBaseMonoFontBold ) THIS.SetRegistryKeyValue("BaseMonoFontItalic", THIS.lBaseMonoFontItalic) * other options not saved here: * save addins to registry is done on close, not after options dialog, * since we're reading from and manipulating * the member array for the life of the engine * save frame/environment has to be done directly from the options * dialog, since this can't be changed during the life of the engine * (we're just saving for the next engine instance) ENDIF ENDPROC PROCEDURE setregisteredaddins LOCAL iAddInNumber, liEmpty, liKeysSet STORE 0 TO liEmpty, liKeysSet IF THIS.lUsingRegistry FOR iAddInNumber = 1 TO ALEN(THIS.aAddIns) IF NOT EMPTY(THIS.aAddIns[iAddInNumber]) IF liEmpty # 0 THIS.SetRegistrykeyValue("AddIn"+ALLTR(STR(liEmpty)), ; THIS.aAddIns[iAddInNumber]) liEmpty = 0 ELSE liKeysSet = liKeysSet + 1 THIS.SetRegistrykeyValue("AddIn"+ALLTR(STR(liKeysSet)), ; THIS.aAddIns[iAddInNumber]) ENDIF ELSE * put in a nullstring, since if something was * deleted from the array it is no longer a valid entry THIS.SetRegistrykeyvalue("AddIn"+ALLTR(STR(iAddInNumber)), [""]) liEmpty = iAddInNumber ENDIF ENDFOR ENDIF RETURN NOT THIS.lError ENDPROC PROCEDURE deleteregisteredaddin LPARAMETER tcFileToDelete LOCAL iAddInNumber SET EXACT ON iAddInNumber = ASCAN(THIS.aAddIns,LOWER(tcFileToDelete)) IF iAddInNumber # 0 ADEL(THIS.aAddIns, iAddInNumber) ENDIF SET EXACT OFF RETURN NOT THIS.lError ENDPROC PROCEDURE createforms IF THIS.lInCoverageFrame #IF COV_COMPILED_IN_VFP5 LOCAL cLibs, cAlias cLibs = SET("CLASSLIB") cAlias = THIS.SetClassLibToAlias(COV_BASE_CLASSLIB,THIS.cAppName) THIS.oFrame = CREATEOBJECT(cAlias+".cov_frame",THIS) IF NOT EMPTY(cAlias) IF NOT EMPTY(cLibs) SET CLASSLIB TO &cLibs ELSE SET CLASSLIB TO ENDIF ENDIF #ELSE THIS.oFrame = NEWOBJECT("cov_frame",COV_BASE_CLASSLIB,THIS.cAppName,THIS) #ENDIF ENDIF THIS.SetFormsetAttributes() RETURN NOT THIS.lError ENDPROC PROCEDURE gettablename LPARAMETERS tcWhichSuffix, tcWhichExt LOCAL iPos, cSuffix, cDBFStem, cTableName, cExt IF TYPE("tcWhichSuffix") = "C" cSuffix = tcWhichSuffix ELSE cSuffix = "" ENDIF IF VARTYPE(tcWhichExt) # "C" OR EMPTY(tcWhichExt) cExt = "DBF" ELSE cExt = tcWhichExt ENDIF iPos = AT(".",THIS.cSourceFile) IF iPos = 0 cDBFStem = THIS.cSourceFile + cSuffix ELSE cDBFStem = LEFT(THIS.cSourceFile, iPos-1) + cSuffix ENDIF iPos = 1 cTableName = FORCEEXT(cDBFStem+"1",cExt) IF NOT EMPTY(SYS(2000,cTableName)) DO WHILE NOT EMPTY(SYS(2000,cTableName)) iPos = iPos+1 cTableName = FORCEEXT(cDBFStem+ALLTR(STR(iPos)),cExt) ENDDO ENDIF RETURN LOWER(cTableName) ENDPROC PROCEDURE setapphome LOCAL cSys16, iLevel STORE "" TO THIS.cAppName, THIS.cAppHome IF LEFT(UPPER(SYS(16,0)),2) # "ON" THIS.cAppHome = SUBSTR(SYS(16,0),1,RAT("\",SYS(16,0))) ELSE THIS.cAppHome = SUBSTR(SYS(16,2),1,RAT("\",SYS(16,2))) ENDIF IF "PROCEDURE" $ THIS.cAppHome THIS.cAppHome = SUBSTR(THIS.cAppHome,11) THIS.cAppHome = SUBSTR(THIS.cAppHome,AT(" ",THIS.cAppHome)+1) ENDIF * because this engine is able to take part in a * modeless app, we have to be careful to * SET CLASSLIB ... TO... IN the appropriate APP * or EXE, but we may not know what that container * file is named. FOR iLevel = 256 TO 1 STEP -1 && 256 = twice the nested programs currently allowed! * note: VFP6-specific code would be different cSys16 = UPPER(SYS(16,iLevel)) IF INLIST(RIGHT(cSys16,3),"APP","EXE","DLL") THIS.cAppName = cSys16 EXIT ENDIF ENDFOR IF "PROCEDURE" $ THIS.cAppName THIS.cAppName = SUBSTR(THIS.cAppName,11) THIS.cAppName = SUBSTR(THIS.cAppName,AT(" ",THIS.cAppName)+1) ENDIF RETURN .T. ENDPROC PROCEDURE setformsetattributes IF THIS.lInCoverageFrame WITH THIS.oFrame .Height = THIS.GetRegistryKeyValue("FrameHeight", .Height ) .Top = THIS.GetRegistryKeyValue("FrameTop", .Top) .Left = THIS.GetRegistryKeyValue("FrameLeft", .Left) .Width = THIS.GetRegistryKeyValue("FrameWidth", .Width) ENDWITH ENDIF RETURN NOT THIS.lError ENDPROC PROCEDURE saveformsetattributes IF THIS.lInCoverageFrame AND (NOT ISNULL(THIS.oFrame)) WITH THIS.oFrame THIS.SetRegistryKeyValue("FrameTop",.Top) THIS.SetRegistryKeyValue("FrameLeft",.Left) THIS.SetRegistryKeyValue("FrameWidth",.Width) THIS.SetRegistryKeyValue("FrameHeight",.Height) .Release() ENDWITH ENDIF RETURN NOT THIS.lError ENDPROC PROCEDURE addformpositionsaver LPARAMETERS toFormRef ASSERT ISNULL(toFormRef) OR ; (VARTYPE(toFormRef) = "O" AND UPPER(toFormRef.BaseClass) == "FORM") IF (NOT FILE(COV_BASE_CLASSLIB)) AND EMPTY(THIS.cAppName) RETURN ENDIF LOCAL lcObjName, loForm lcObjName = "cus"+SYS(2015) #IF COV_COMPILED_IN_VFP5 LOCAL lcLibs, lcAlias lcLibs = SET("CLASSLIB") lcAlias = THIS.SetClassLibToAlias(COV_BASE_CLASSLIB,THIS.cAppName) IF ISNULL(toFormRef) * called at startup to handle * all forms currently in the set FOR EACH loForm IN THIS.Forms IF UPPER(loForm.BaseClass) == "FORM" loForm.AddObject(lcObjName,lcAlias+".cov_SavePosition") ENDIF ENDFOR ELSE toFormRef.AddObject(lcObjName,lcAlias+".cov_SavePosition") ENDIF IF NOT EMPTY(lcAlias) IF NOT EMPTY(lcLibs) SET CLASSLIB TO &lcLibs ELSE SET CLASSLIB TO ENDIF ENDIF #ELSE IF ISNULL(toFormRef) * called at startup to handle * all forms currently in the set FOR EACH loForm IN THIS.Forms IF UPPER(loForm.BaseClass) == "FORM" loForm.NewObject(lcObjName,"cov_SavePosition",COV_BASE_CLASSLIB, THIS.cAppName) ENDIF ENDFOR ELSE toFormRef.NewObject(lcObjName,"cov_SavePosition",COV_BASE_CLASSLIB, THIS.cAppName) ENDIF #ENDIF ENDPROC PROCEDURE showstackxml LPARAMETERS tcLog LOCAL lReturn lReturn = THIS.GetStackXML(tcLog) IF lReturn lReturn = THIS.DisplayStackXML() ENDIF RETURN lReturn AND NOT THIS.lError ENDPROC PROCEDURE getstackxml LPARAMETERS tcLog IF THIS.lVFP5 * no stack info RETURN .F. ENDIF LOCAL liSelect, llDeleted, lcFilter, lcOrder, lcStackAlias, ; laTemp[1], liIndex, lcStack ,lcFile, lcSourceFile, ; liStackLevel, lcLastExecuting, lcExecutingStack, ; liPos, llAdd, liType, lnDuration, llEvent, ; loXML, loNode, lcTag, loParent, loThisNode, llReturn, ; lnPercent, liRecs, liPercent #IF NOT COV_LOAD_STACK_FROM_DBF LOCAL liMaxLineLength, liLineItems, laLine[1], ; lcLine, liHandle, ; loAncester, lcPathedParent, loParentStackAttrib, ; Duration, ObjClass, Executing, Hostfile, ; Stacklevel, FileType #ENDIF #IF COV_LOAD_STACK_FROM_DBF lcSourceFile = THIS.cSourceFile #ELSE IF EMPTY(tcLog) OR VARTYPE(tcLog) # "C" lcSourceFile = THIS.cSourceFile ELSE lcSourceFile = tcLog ENDIF #ENDIF THIS.LockScreens(.T.) THIS.ShowStatus(COV_LOADING_STACKINFO_LOC+": "+lcSourceFile+"...") llReturn = .T. THIS.lError = .F. liSelect = SELECT() llDeleted = (SET("DELETED") = "ON") IF llDeleted SET DELETED OFF ENDIF SELECT 0 lcStackAlias = "S"+RIGHT(SYS(2015),9) IF USED(lcStackAlias) USE IN (lcStackAlias) ENDIF CREATE CURSOR (lcStackAlias) ; (FName C(30), ; FType I, ; FStack I, ; FDuration N(THIS.iLenDuration, N_COVLOG_PRECISION), ; FLevel C(THIS.iLenExecuting) ) #IF COV_LOAD_STACK_FROM_DBF SELECT (THIS.cSourceAlias) lcFilter = SET("FILTER") lcOrder = SET("ORDER") SET ORDER TO SET FILTER TO #ELSE SELECT 0 * Going to an empty * workarea ensures that the field values don't * collide with our variables of the same name. * Since this code is written for both * COV_LOAD_STACK_FROM_DBF and * NOT COV_LOAD_STACK_FROM_DBF, we * address either field values and memvars * in the same codes, and there are no * m.'s permissable #ENDIF liStackLevel = 0 lcLastExecuting = "" lcExecutingStack = "" * Load an interim cursor * using either the log as loaded * from the Coverage DBF * or directly from the original * text log file. "Collapse" adjacent * log lines that come from the same * executing program into one entry in * this interim cursor. #IF COV_LOAD_STACK_FROM_DBF SCAN ALL #ELSE liHandle = FOPEN(lcSourceFile) IF liHandle > -1 liLineItems = (FCOUNT(THIS.cSourceAlias) -1) liMaxLineLength = (INT(N_VFP_PATH_LIMIT * 1.5)) DO WHILE NOT FEOF(liHandle) lcLine = FGETS(liHandle, liMaxLineLength) IF EMPTY(lcLine) LOOP * first line, or line cut out by user to shorten analysis ENDIF IF (ALINES(laLine,lcLine,.T.,[COV_LOG_DELIMITER]) < liLineItems) LOOP * shouldn't happen, even for ON... events ENDIF Duration = VAL(laLine[1]) ObjClass = laLine[2] Executing = laLine[3] Hostfile = laLine[5] Stacklevel = VAL(laLine[6]) IF NOT EMPTY(Hostfile) FileType = "."+LOWER(JUSTEXT(Hostfile)) ELSE FileType = "" ENDIF #ENDIF llAdd = .F. DO CASE CASE liStackLevel = 0 * first record lcExecutingStack = "#"+ALLTR(COV_STACKEXPR) llAdd = .T. CASE StackLevel > liStackLevel lcExecutingStack = lcExecutingStack+"#"+ALLTR(COV_STACKEXPR) llAdd = .T. CASE StackLevel = (liStackLevel-1) * check the parent IF StackLevel = 1 llAdd = .T. ELSE liPos = AT("#",lcExecutingStack,StackLevel) lcStack = SUBSTR(lcExecutingStack,liPos+1) IF SUBSTR(lcStack,1,AT("#",lcStack)-1) == ALLTR(COV_STACKEXPR) * same as the calling stacklevel ELSE * else fix the chain and add a record llAdd = .T. ENDIF ENDIF CASE (StackLevel < liStackLevel) OR ; (NOT (lcLastExecuting == ALLTR(COV_STACKEXPR))) * it's possible to "jump up levels" * if the previous program was the last line or * in the RETURN line of its calling program IF StackLevel = 1 lcExecutingStack = "" ELSE liPos = AT("#",lcExecutingStack,StackLevel) lcExecutingStack = SUBSTR(lcExecutingStack, liPos-1) ENDIF lcExecutingStack = lcExecutingStack+"#"+ALLTR(COV_STACKEXPR) llAdd = .T. OTHERWISE llAdd = .F. * same proc ENDCASE lnDuration = Duration IF llAdd liStackLevel = StackLevel lcLastExecuting = COV_STACKEXPR liType = ASCAN(THIS.aFileTypes,FileType) lcFile = Hostfile IF liType > 0 liType = ASUBSCRIPT(THIS.aFileTypes,liType,1) ENDIF INSERT INTO (lcStackAlias) ; (FLevel,FType,FName,FDuration,FStack) ; VALUES (lcLastExecuting,liType,; LOWER(JUSTSTEM(ALLTR(lcFile)))+; IIF(EMPTY(lcFile),"","."+LOWER(JUSTEXT(ALLTR(lcFile)))), ; lnDuration, liStackLevel) ELSE REPLACE FDuration WITH (FDuration + lnDuration) IN (lcStackAlias) ENDIF #IF COV_LOAD_STACK_FROM_DBF ENDSCAN #ELSE ENDDO =FCLOSE(liHandle) ELSE THIS.DoMessage(COV_LOG_CANNOT_BE_OPENED_LOC,COV_STOP_MESSAGEBOX) llReturn = .F. ENDIF #ENDIF IF llReturn AND ((NOT USED(lcStackAlias)) OR ; RECCOUNT(lcStackAlias) = 0) THIS.DoMessage(COV_LOG_HAS_NO_USABLE_RECORDS_LOC,COV_STOP_MESSAGEBOX) llReturn = .F. ENDIF * If the log has successfully loaded, * generate the XML in either "extended" or * "collapsed" format. IF llReturn THIS.ShowStatus(COV_GENERATING_STACKXML_LOC+" "+lcSourceFile+"... ") SELECT (lcStackAlias) liRecs = RECCOUNT() liPercent = 0 GO TOP loXML = CREATEOBJECT("Microsoft.XMLDom") loXML.LoadXML("<"+COV_STACKROOT+"-"+ ; CHRTRAN(JUSTFNAME(THIS.cSourceFile),; [ &!{}%$^',()~+=@`"]+"[]","_")+"/>") liStackLevel = 0 SCAN #IF NOT COV_LOAD_STACK_FROM_DBF llEvent = (EMPTY(Fname)) && handling for on-events #ENDIF lcTag = IIF(llEvent,COV_STACK_ONEVENT_TAG,ALLTRIM(FName)) IF NOT EMPTY(Flevel) lcTag = lcTag+"-"+ALLTRIM(Flevel) ENDIF lcTag = STRTRAN(lcTag,SPACE(1),"-") && necessary for on-events DO CASE CASE (liStackLevel = 0) llAdd = .T. loParent = loXML.DocumentElement CASE (FStack = 1) IF loNode.TagName == lcTag llAdd = .F. ELSE llAdd = .T. loParent = loXML.DocumentElement ENDIF CASE FStack = liStackLevel IF loNode.TagName == lcTag llAdd = .F. ELSE llAdd = .T. loParent = loNode.ParentNode ENDIF CASE FStack > liStackLevel llAdd = .T. loParent = loNode OTHERWISE && FStack < liStackLevel * check to see how many levels * up we have to go, since * it's possible to skip levels (with OKLs, errors, * and other events) FOR liIndex = 1 TO FStack IF (VAL(loNode.getAttribute("StackLevel")) <= FStack ) OR ; (ISNULL(loNode.ParentNode.ownerDocument)) && we don't want to go to the root EXIT ENDIF loNode = loNode.ParentNode ENDFOR IF VAL(loNode.getAttribute("StackLevel")) = FStack loParent = loNode.ParentNode ELSE loParent = loNode ENDIF IF loNode.TagName == lcTag llAdd = .F. ELSE llAdd = .T. ENDIF ENDCASE IF llAdd loThisNode = NULL #IF NOT COV_LOAD_STACK_FROM_DBF IF NOT THIS.lStackXMLExtendedTree * now check to see if this element already exists * at this level IF FStack > 1 loAncester = loParent lcPathedParent = "" loParentStackAttrib = loParent.attributes.getNamedItem("StackLevel") IF ISNULL(loParentStackAttrib) * this can happen if the log has been excerpted/truncated lcPathedParent = "/" + loParent.NodeName ELSE FOR liIndex = 0 TO (VAL(loParentStackAttrib.value)) IF ISNULL(loAncester.ownerDocument) EXIT ENDIF lcPathedParent = "/"+ loAncester.NodeName + lcPathedParent loAncester = loAncester.ParentNode ENDFOR ENDIF ELSE lcPathedParent = "/" + loParent.NodeName ENDIF loThisNode = loXML.SelectSingleNode( ; lcPathedParent + "/" + ; lcTag+"[@StackLevel="+TRANSFORM(FStack)+"]") ENDIF #ENDIF IF ISNULL(loThisNode) loThisNode = loXML.createElement(lcTag) loThisNode.setAttribute("StackLevel",TRANSFORM(FStack)) IF NOT llEvent loThisNode.setAttribute("RunsFor",TRANSFORM(FDuration)) ELSE * On Event items don't have a meaningful * duration because we can't figure out which * bar etc was actually invoked. Consequently, * don't report at all -- could also report * this attribute as follows: * loThisNode.setAttribute("RunsFor",COV_ATTRIB_N_A) ENDIF #IF NOT COV_LOAD_STACK_FROM_DBF IF NOT THIS.lStackXMLExtendedTree IF FStack > 1 loThisNode.setAttribute("TimesCalled","1") ELSE * It doesn't really make sense to say we know * how many times a StackLevel 1 program was invoked. * Without some kludgy examination of line numbers (which * would never be perfect) we can't know whether * a top level program was re-invoked from the * command line or is continuing to execute from * the earlier call. Consequently, omit * TimesCalled at StackLevel 1. This attribute * could also be reported as follows: * loThisNode.setAttribute("TimesCalled",COV_ATTRIB_N_A) ENDIF ENDIF #ENDIF loParent.appendChild(loThisNode) ELSE IF NOT llEvent loThisNode.SetAttribute("RunsFor", ; TRANSFORM(VAL(loThisNode.SelectSingleNode("@RunsFor").nodeValue)+FDuration)) ENDIF #IF NOT COV_LOAD_STACK_FROM_DBF * If reporting for StackLevel 1, remove * the first condition in the IF statement below: IF NOT ((FStack = 1) OR THIS.lStackXMLExtendedTree ) loThisNode.SetAttribute("TimesCalled", ; TRANSFORM(VAL(loThisNode.SelectSingleNode("@TimesCalled").nodeValue)+1)) ENDIF #ENDIF ENDIF loNode = loThisNode ENDIF liStackLevel = FStack lnPercent = (RECNO()/liRecs) * 100 IF lnPercent >= 10 + liPercent liPercent = INT(lnPercent) THIS.ShowStatus(COV_GENERATING_STACKXML_LOC+" "+lcSourceFile+"... "+TRANSFORM(liPercent)+"%") ENDIF ENDSCAN ENDIF #IF COV_LOAD_STACK_FROM_DBF SELECT (THIS.cSourceAlias) SET ORDER TO &lcOrder SET FILTER TO &lcFilter #ENDIF IF llReturn IF THIS.lStackXMLExtendedTree lcFile = THIS.GetTableName(COV_STACKXMLEXT_SUFFIX,"XML") ELSE lcFile = THIS.GetTableName(COV_STACKXML_SUFFIX,"XML") ENDIF IF NOT THIS.lUnattended lcFile = ; THIS.GetResourceLocation(lcSourceFile, ; COV_SETSTACKXML_TITLE_LOC, ; COV_XMLFILES_LOC + " (*.xml)|*.xml", ; lcFile, ; "PUTFILE") ENDIF IF NOT EMPTY(lcFile) IF NOT EMPTY(SYS(2000,lcFile)) ERASE (lcFile) RECYCLE ENDIF THIS.cSavedStackXML = lcFile THIS.ShowStatus(COV_WRITING_STACKXML_LOC+": "+THIS.cSavedStackXML+"...") STRTOFILE(loXML.XML,THIS.cSavedStackXML) ELSE llReturn = .F. ENDIF ENDIF IF USED(lcStackAlias) USE IN (lcStackAlias) ENDIF SELECT (liSelect) IF llDeleted SET DELETED ON ENDIF THIS.ClearStatus() THIS.LockScreens(.F.) THIS.lError = .F. RETURN llReturn ENDPROC PROCEDURE displaystackxml LPARAMETERS tcXMLFile LOCAL lcFile, liReturnValue liReturnValue = -1 lcFile = tcXMLFile IF EMPTY(lcFile) or ; VARTYPE(lcFile) # "C" OR ; EMPTY(SYS(2000,lcFile)) lcFile = THIS.cSavedStackXML ENDIF IF NOT (EMPTY(lcFile) OR ; EMPTY(SYS(2000,lcFile))) DECLARE long ShellExecuteA IN SHELL32 ; long, string, string, string, string, long liReturnValue = ShellExecuteA( 0, "open", ; lcFile, "","", 1 ) ENDIF RETURN (liReturnValue >= 32) AND (NOT THIS.lError) ENDPROC PROCEDURE togglestackxmlextendedtree THIS.lStackXMLExtendedTree = ; (! THIS.lStackXMLExtendedTree) RETURN (NOT THIS.lError) ENDPROC PROCEDURE transformstackxml LPARAMETERS tcXSLT, tcXMLIn, tcXMLOut, tlNoShow LOCAL lcXSLT, lcInputFile, lcOutputFile, oXSL, oXML, ; lcResult, llSuccess, lcSaveSource llSuccess = .T. IF VARTYPE(tcXSLT) # "C" OR ; EMPTY(SYS(2000,tcXSLT)) lcXSLT = THIS.cStackXSLT ELSE lcXSLT = tcXSLT ENDIF IF VARTYPE(lcXSLT) # "C" OR ; EMPTY(SYS(2000,lcXSLT)) lcXSLT = THIS.GetResourceLocation("", ; COV_GETXSLTFILE_TITLE_LOC, ; COV_XSLFILES_LOC + " (*.xsl;*.xslt)|*.xsl;*.xslt|" + ; COV_ALLFILES_LOC+" (*.*)|*.*" ,; "", ; "GETFILE" ) ENDIF IF VARTYPE(lcXSLT) # "C" OR ; EMPTY(SYS(2000,lcXSLT)) llSuccess = .F. ENDIF IF llSuccess IF (VARTYPE(tcXMLIn) # "C" OR ; EMPTY(SYS(2000,tcXMLIn))) lcInputFile = THIS.cSavedStackXML ELSE lcInputFile = tcXMLIn ENDIF IF (VARTYPE(lcInputFile) # "C" OR ; EMPTY(SYS(2000,lcInputFile))) llSuccess = THIS.GetStackXML() IF llSuccess lcInputFile = THIS.cSavedStackXML ENDIF ENDIF ENDIF IF llSuccess oXSL = CreateObject("Microsoft.XMLDOM") IF ISNULL(oXSL) OR (NOT oXSL.Load(lcXSLT)) llSuccess = .F. ENDIF ENDIF IF llSuccess oXML = CreateObject("Microsoft.XMLDOM") IF ISNULL(oXML) OR (NOT oXML.Load(lcInputFile)) llSuccess = .F. ENDIF ENDIF IF llSuccess lcResult = oXML.transformNode(oXSL) IF ISNULL(lcResult) OR EMPTY(lcResult) llSuccess = .F. ENDIF ENDIF IF llSuccess IF VARTYPE(tcXMLOut) = "C" AND (NOT EMPTY(tcXMLOut)) lcOutputFile = FULLPATH(tcXMLOut) IF EMPTY(JUSTEXT(lcOutputFile)) lcOutputFile = FORCEEXT(lcOutputFile,"htm") ENDIF ELSE lcSaveSource = THIS.cSourceFile THIS.cSourceFile = lcInputFile lcOutputFile = THIS.GetTableName(COV_TRANSFORM_SUFFIX,"HTM") THIS.cSourceFile = lcSaveSource IF (NOT THIS.lUnattended) lcOutputFile = ; THIS.GetResourceLocation(lcInputFile, ; COV_SETTRANSFORMEDXML_TITLE_LOC, ; COV_HTMFILES_LOC + " (*.htm;*.html;*.txt)|*.htm;*.html;*.txt|" + ; COV_ALLFILES_LOC+" (*.*)|*.*" ,; lcOutputFile, ; "PUTFILE") ENDIF ENDIF IF (EMPTY(lcOutputFile)) llSuccess = .F. ENDIF ENDIF IF llSuccess IF NOT EMPTY(SYS(2000,lcOutputFile)) ERASE (lcOutputFile) RECYCLE ENDIF THIS.ShowStatus(COV_WRITING_TRANSFORM_LOC+": "+lcOutputFile+"...") STRTOFILE(lcResult,lcOutputFile) IF NOT tlNoShow THIS.DisplayStackXML(lcOutputFile) ENDIF ENDIF STORE NULL TO oXSL, oXML RETURN llSuccess AND (NOT THIS.lError) ENDPROC PROCEDURE Deactivate IF THIS.lTurnedOffTrace SET TRBETWEEN ON THIS.lTurnedOffTrace = .F. ENDIF ACTIVATE SCREEN RETURN NOT THIS.lError ENDPROC PROCEDURE Activate IF SET("TRBETWEEN") = "ON" SET TRBETWEEN OFF THIS.lTurnedOffTrace = .T. ENDIF * note: we could go to the registry * to get this variable name, * rather than using a #DEFINE, if desired. PUBLIC COV_PUBLIC_VARIABLE STORE THIS TO ([COV_PUBLIC_VARIABLE]) THIS.SuspendCoverage() RETURN NOT THIS.lError ENDPROC PROCEDURE Unload CLOSE DATA * close data in the session explicitly to avoid any unknown data * sessions left over from BROWSEs NOWAITs opened in this session * or other use of these tables done by subclasses, addins, etc. THIS.ResumeCoverage() IF THIS.lTurnedOffTrace SET TRBETWEEN ON THIS.lTurnedOffTrace = .F. ENDIF RELEASE COV_PUBLIC_VARIABLE ENDPROC PROCEDURE Init LPARAMETERS tcFile, tlUnattended, tcAddIn LOCAL lReturn, lcFile, loForm lReturn = DODEFAULT() IF lReturn AND THIS.PassedProperParams(tcFile,tlUnattended,tcAddIn) THIS.lUnattended = tlUnattended THIS.lIgnoreCoverageFilenames = COV_IGNORE_COVERAGE_FILES THIS.SetAppHome() IF EMPTY(tcFile) lcFile = LOWER(THIS.cSuspendedLog) ELSE lcFile = LOWER(tcFile) ENDIF ELSE lReturn = .F. ENDIF * options required for proper file processing * according to user preferences: THIS.lUsingOCXs = COV_USE_OCXS IF lReturn AND NOT THIS.SetWorkOptions() lReturn = .F. ENDIF IF lReturn IF NOT THIS.lUnattended lReturn = THIS.CreateForms() IF lReturn AND THIS.lSaveFormPositions lReturn = THIS.AddFormPositionSaver(NULL) ENDIF ELSE THIS.lInCoverageFrame = .F. * override this preference setting for unattended mode ENDIF ENDIF * the real guts of the work: IF lReturn AND NOT THIS.SetUpWorkFiles(lcFile) lReturn = .F. ENDIF * anything else we want to do now, * such as adding buttons, * running some queries? IF lReturn IF EMPTY(tcAddIn) THIS.cAddIn = "" ELSE THIS.cAddIn = tcAddIn IF NOT THIS.RunAddIn() lReturn = .F. ENDIF ENDIF ENDIF IF lReturn * either save results to disk * immediately, if we're in unattended mode, * or set up the interface for the user * to explore the results: IF THIS.lUnattended IF lReturn AND NOT THIS.SaveTargetToDisk() lReturn = .F. ENDIF IF lReturn AND NOT THIS.CreateSkippedCursor() lReturn = .F. ENDIF IF lReturn AND NOT THIS.SaveSkippedCursor() lReturn = .F. ENDIF IF lReturn AND NOT THIS.GetStackXML() lReturn = .F. ENDIF ELSE IF lReturn AND NOT THIS.SetUIOptions() lReturn = .F. ENDIF ENDIF ENDIF IF lReturn * Note: we could go to the registry * to set this varname if desired... PUBLIC COV_PUBLIC_VARIABLE STORE THIS TO ([COV_PUBLIC_VARIABLE]) ELSE FOR EACH loForm IN THIS.Forms IF NOT ISNULL(loForm) loForm.Release() ENDIF ENDFOR THIS.oFrame = NULL THIS.ResumeCoverage() ENDIF RETURN lReturn AND NOT THIS.lError ENDPROC PROCEDURE Load * make sure any apps that contain this * object look for access to the appropriate * header files: EXTERNAL PROCEDURE COVERAGE.H EXTERNAL PROCEDURE COV_CHAR.H EXTERNAL PROCEDURE COV_LOCS.H EXTERNAL PROCEDURE COV_DLGS.H EXTERNAL PROCEDURE COV_SPEC.H EXTERNAL PROCEDURE COV_REGS.H EXTERNAL PROCEDURE COV_TUNE.H * datasession-specific settings required * by the engine SET POINT TO COV_POINT_SETTING SET TALK OFF SET MEMOWIDTH TO COV_MEMOWIDTH SET DELETED ON SET EXACT OFF SET SAFETY OFF SET EXCLU OFF SET BLOCKSIZE TO 0 IF SET("TRBETWEEN") = "ON" SET TRBETWEEN OFF THIS.lTurnedOffTrace = .T. ENDIF * make the app a Singleton: LOCAL ARRAY aTemp[1] LOCAL oForm, lFoundWindow IF AINSTANCE(aTemp, THIS.CLASS) > 0 * first look for any modal dialog: FOR EACH oForm IN _SCREEN.Forms IF UPPER(oForm.BaseClass) # "TOOLBAR" IF oForm.WindowType = 1 lFoundWindow = .T. EXIT ENDIF ENDIF ENDFOR IF NOT lFoundWindow * what was previously active in the coverage formset? FOR EACH oForm IN (aTemp[1]+".Forms") IF UPPER(oForm.BaseClass) # "TOOLBAR" AND ; oForm.Visible lFoundWindow = .T. EXIT ENDIF ENDFOR ENDIF IF lFoundWindow ACTIVATE WINDOW (oForm.Name) TOP ENDIF WAIT WINDOW LEFT(COV_ALREADY_ACTIVE_LOC,COV_MESSAGE_LIMIT) NOWAIT RETURN .F. ENDIF IF NOT (THIS.SuspendCoverage() AND ; THIS.FillFileTypeArray()) RETURN .F. ENDIF RETURN NOT THIS.lError ENDPROC PROCEDURE Error LPARAMETERS nError, cMethod, nLine DODEFAULT(nError, cMethod, nLine) IF (NOT INLIST(nError,1420,1421,1422,1423,1424,1426,1427,; 1428,1429,1431,1434,1436,1508,1440,2003,1782,2021)) AND ; (NOT UPPER(cMethod)=="RUNADDIN") COV_ENGINE_ERROR_DEFAULT ENDIF ENDPROC PROCEDURE Destroy THIS.SaveFormsetAttributes() THIS.oFrame = .NULL. THIS.SetRegisteredAddins() RETURN DODEFAULT() ENDPROC PROCEDURE COV_TOOLBAR.Dock LPARAMETERS nLocation NODEFAULT ENDPROC PROCEDURE COV_TOOLBAR.DblClick NODEFAULT ENDPROC PROCEDURE COV_TOOLBAR.DragDrop LPARAMETERS oSource, nXCoord, nYCoord NODEFAULT ENDPROC PROCEDURE COV_TOOLBAR.Activate NODEFAULT RETURN NOT THIS.lError ENDPROC PROCEDURE COV_TOOLBAR.Show LPARAMETERS nStyle NODEFAULT RETURN NOT THIS.lError ENDPROC  xx*-O%!O UC tcMessagebC T'%CtnMessageBoxOptionsbNp T%%CtcMessageBoxTitlebCTCoverage Profiler%R,C=TCx BU TCMESSAGETNMESSAGEBOXOPTIONSTCMESSAGEBOXTITLELIRETURNTHIS LUNATTENDED  B UTCSOURCETCTARGETTHISLERROR&\%CTHIS.cMarkExecutedbC CTHIS.cMarkNotExecutedbC C &TC MarkExecuted0TCMarkNotExecuted|CXTCC>C>DTCCXTCCX B U IMARKLENGTHTHIS CMARKEXECUTEDCMARKNOTEXECUTEDGETREGISTRYKEYVALUELERROR  B UTCSOURCETCTARGETTHISLERROR B UTHISLERRORTC %6TC %TC#%CTHIS.aAddIns[1]bCTCB ULRETURNTHIS SETFONTVALUES SETUIFONTSGETREGISTEREDADDINSCADDINAADDINSLERROR3hTCCtcFilebC CCtcAddInbC  !CC tlUnattendedbL  % #C3You have passed one or more parameters incorrectly.C C %This application takes the following C parameters, all optional:C C 5(1), type 'C' the name of a coverage log to mark;C C 9(2), type 'L' a switch to process the log unattended;C C 7(3), type 'C' the name of an Add-In program to run.Coverage Profiler Problem BUTCFILE TLUNATTENDEDTCADDINLRETURNTHIS DOMESSAGEj%CtcFilebCKTCCOVERAGEv,TC"%C CCC] &%C.CC\\T.log!%CCC] TC.log.txt%C (TC%C CC] TC Please specify coverage log file Coverage Logs (*.log;*.txt)|*.log;*.txt| All Files (*.*)|*.*getfile H C C    C%C CC] MCNo log file specified.Coverage Profiler Problem  Ta CC]TC*The log file you chose does not exist yet.C C +Test your application with COVERAGE SET TO C !, then run Coverage ProfilerC against that log.C C Coverage Profiler# can SET COVERAGE TO your filename C 8now and you can test your application. When you re-run C Coverage Profiler, it will analyze the current C 'contents of SET('COVERAGE') by default.C C Would you like to: C C (SET COVERAGE TO your log file now? (yes)C C 1Pick a filename from existing coverage logs? (no)C C Come back later? (cancel)#Coverage Profiler He  G( C  TC 2%C C 2 Ta %ZTCC@%C.FT.T BU TCFILELRETURNLCFILELIANSWERLOHOSTTHISLVFP5GETRESOURCELOCATION CSOURCEFILE DOMESSAGERELEASE SETLOGFILEP%C4TCCCOVERAGEvfG(< B UTHIS CSUSPENDEDLOGLERRORe%C U%> TTC/Running Coverage Profiler temporarily suspendedC coverage logging to .C C ;How would you like to resume coverage logging to this file?C C Click:C To have this effect:C C YesCXC !-- Append records to the log fileC NoCXC -- Overwrite the log fileC CancelC -- Leave coverage set off#Coverage Profilerx%C* <,CC\\T- HI jG( G(2T %AT-G(vC$Former coverage file is unavailable;C COVERAGE will be off.Coverage Profiler ProblemxT BULRETURNTHIS CSUSPENDEDLOG IRESPONSE LUNATTENDEDLERROR"CCC]  )CValidating source file...TC 6 Ta %-M TCWhTest M .TC, C % 7)TC, C Q FTC% T#+C  d TCT%TCC,   T- C%    T-T -CJFile specified is not correct Coverage Log format for this version of VFP.Coverage Profiler Problem  C BUTHIS CSOURCEFILE SHOWSTATUSLRETURNISELECT LIFIELDCOUNTIHANDLE ILINECOUNTCLINELVFP5TESTONEFIELDLERROR DOMESSAGE CLEARSTATUSz  T.fxp T.prg T.dct T.dbc T.vct T.vcx T.sct T.scx T.mpx T.mpr T.qpx T.qpr T.spx T.spr T.frt T.frx T .lbt T .lbx!BCC  UTHIS AFILETYPESLERROR%C$ Ta!hCTC %{& CfB ULRETURNTHISCCOVFILESALIASFNAME THISFORMSET ILENHOSTFILEFILLCOVERAGEFILENAMECURSORLERRORT%C GB-%C k TazB-%  O %C4You haven't changed the specified Coverage filename.C C -Do you want to re-examine this Coverage file?4Coverage ProfilerxKBa <,CC\\Ca TCPATHv %TC  %<CCreating work files from ...  TC %>TCTTTT"%   TC% T TC H   [ T-T-T  k2$TCC\\CC G)( CC- BU TCLOGFILETCSOURCETCTARGETLRETURNCCURRENTSOURCEFILECOLDPATHTHIS CSOURCEFILECREATECOVERAGEFILENAMECURSOR SETLOGFILE LUNATTENDED LOCKSCREENSSOURCEFILEISLOG SHOWSTATUSCREATESOURCECURSORCREATETARGETCURSORCSAVEDTARGETDBFCSAVEDSKIPFILESCSAVEDSTACKXMLLINPROFILEMODELSTARTINPROFILEMODELMARKALLONLOADMARKALLTARGETRECORDSLERRORCDEFAULTWRITEPATHSETUITOSHOWCODESETUITOSHOWFILESTATES CLEARSTATUS  TCWTCSourceTCSkipped%C} QG:oQC'C@C X G F B U TCSOURCE TCSKIPPEDCSKIPPEDCSOURCEISELECTTHISGETALIASHOSTFILESKIPPED THISFORMSET ILENHOSTFILELERROR TCWTCSkipped%CN[BaTC_SKIPoǼ1 F% TT B U TCSKIPPEDCSKIPPEDCDBFNAMEISELECTTHISGETALIAS GETTABLENAMELERRORCSAVEDSKIPFILES TCSource%CJ Q%hNC05.Ch"06.00ChCCCh\g  6 C  C  ICChNC05.Ch"06.00ChCCCh\g  6 C  C  ICIC FC& C@ G((0TC*CIndexing source records... %& C @ & & C @ & C' G((0 CB UTCSOURCELRETURNCSOURCETHISGETALIASLVFP5DURATION THISFORMSET ILENDURATIONOBJCLASS ILENOBJCLASS EXECUTING ILENEXECUTINGPROCLINEHOSTFILE ILENHOSTFILEFILETYPE STACKLEVELADJUSTSOURCECURSORFILLSOURCECURSOR SHOWSTATUSIFDEL CLEARSTATUSLERROR B UTCSOURCETHISLERROR' TCTargetTCSource%Cp Q(CCreating target items...%0o CC CC C.  .6C C. \ Q C' Tempo CCC.fxp.mpx.qpx.spxC C. \CC CC C.  !6C C. \6 Q C' Tempwh C  C CMMMIIII FCTemp&QC F& & & C' G((0 CTCB UTCSOURCETCTARGETCSOURCECTARGETLRETURNTHISGETALIAS SHOWSTATUSLVFP5HOSTFILEOBJCLASS EXECUTING THISFORMSET ILENOBJCLASSFILETYPETEMP ILENHOSTFILEMARKEDPROFILED SOURCECODE COVERABLECOVEREDOBJTOTALOBJHITSADJUSTTARGETCURSORSTANDARDIFDEL CLEARSTATUSFILLTARGETCURSORLERROR B UTCTARGETTHISLERROR B UTHISLERROR TaTCTargetTC_COV % T }T C 4Please specify location to save Coverage results for Table/DBF (*.dbf)|*.dbfPUTFILE TC   %p TCW F( % bFQ i1Tempi1TempQTC @TC.%TC\%CC.bak] * .bak%CC.tbk] ^ .tbk F%T B UTCTARGETCDBFDEFAULTNAMELRETURNISELECTCTARGET CDETRITUSIPOSTHISGETALIAS GETTABLENAME LUNATTENDEDCSAVEDTARGETDBFGETRESOURCELOCATION CSOURCEFILELERRORTEMP SOURCECODEFILETYPE Q     TCC <CtcSourcebCC CtcTargetbC C  %CTCSourceTCTarget! T T TCW F TCOTCC@%!TCC!=TCC>\ TTCC@ T  T T  H  C  C & Ta2 % JCaCCGetting source code from C....2T C .vct.sct.dct.frt.lbt %  % CTemp  %CCTemp&@C@ FQ%CTemp PFQ¾%  Hr .dct(-CC @storedproceduressource T ! C .sct.vct(1-CC" CC#@CC".C#@6 %C4# T $$-CCC%@dataenvironmentrelationcursorUCC" CC#@CC".C#@6CCCC" CC#@CC".C#@6>R %C4 T $ %&8 T(C.4TCC.\;-CC" CC#@CC".C#@6C$ %C40 T $1%CC'(C')Standard> #%C4 T (#>!$C.(%TCC.\T C.%C.TC \.TC C. \2-CC".C#@C.C$ %C4 T $1%CC'(C')Standard&IF EMPTY(&cTarget..SourceCode)> ## T ! C .frt.lbtT C.% w-+%Tname="C \"(-+CC,CX  T -2 T w %C.. T s hTemp.MF. T .%# iCSource file unavailable.C C ()Coverage Profiler Problem/$EHostfileC'( , ;%- C "C .vct.sct.frt.lbt  %C .vct.sct C$ C'  ( *C+C-  C'  ( F E!>+C@C'( # F > %CTemp  T Q%  C- C1#T C  T- F B U2TCSOURCETCTARGET TLFILLINGALLCSOURCECTARGETISELECTCFILECOBJECTCCLASSCMEMO LMEMOFIELDIPOSLRETURN CFILETYPE IOBJTOTALIRECNO CSOURCEORDERLALREADYHADSOURCECODE CCONTAINERIDOTSATEMPTHISGETALIASOBJCLASSHOSTFILEFILETYPEOBJTOTAL SOURCECODE LOCKSCREENS SHOWSTATUSTEMPLERROR OBJECTNAMECODEPARENTOBJNAMEMETHODS BASECLASSLVFP5 THISFORMSET ILENHOSTFILE ILENOBJCLASSINOBJTYPEEXPRTAGONEFIELD DOMESSAGEWHILE CLEARSTATUS3    TCSource TCB@ TCW8CChecking for source code for    F TC G((0T CODOMETERvT CTALKv G'(G2 % +G2, >G2=t&3 C@CX Ծѿ,G2 G'( SET TALK &cTalkWindow C #) H C  C STATUS BARvOFF C92G&(~%CTC@CC T C  T T T CO% $C@$>$C@ #  G((-TC+  F% {VCLog file has no usable records.Coverage Profiler Problem  C  BUTCSOURCECCOVERAGEFILENAMELRETURNCSOURCECORDERISELECT CTHISHOSTCNEWHOST CFILETYPEIRECNO LRECORDOK IODOMETER CTALKWINDOWTHISGETALIAS SHOWSTATUS CSOURCEFILELINCOVERAGEFRAMEOFRAMENAMEPROCLINEHOSTFILE THISFORMSET ILENHOSTFILEADJUSTSOURCECURSORCLSFILETYPESOURCEAVAILABLEREST DOMESSAGE CLEARSTATUS*C tcFileNamebC CC] %TCC\\E%C;CPATHv;C;CPATHv>  G)(;CPATHv B U TCFILENAMETHIS LSMARTPATHCADDPATHLERROR#%CC BB- TTCC @TCRTC %C> T T%TC  H' C.frt.lbt  08 %CCCC CC >C\C Rf  h C.app.exejTCPlease confirm main program for Programs Only (*.prg)|*.prg| All Files (*.*)|*.*CGETFILE %C CC] 'f Ta> .fxpC  %T.fxpTC.%#TCC\.prgTC.prg<-TCCCC  %CC]TTCR%xTC Please locate Source Files (*)|*| All Files (*.*)|*.*GETFILE PXTC Please locate Source Files (*)|*GETFILE kTC@%CC]C  Ta> C 2 BULRETURN CFILETYPECNEWHOSTCOLDHOSTICOLIELEMENT CDEFAULTEXTIPOSPROCLINEHOSTFILETHIS AFILETYPESLVFP5LIGNORECOVERAGEFILENAMESCCOVFILESALIASGETRESOURCELOCATION EXECUTINGFILETYPEADDPATH;       !" TCWTCSource#$TCTarget#$ F T%TCC&@'(TC)@%!aTCC!=TCC>\v TTC'*TC+@ T T&%#,PRO 06.CChf 2TC.vct.sct.frt.lbt.dctC+TC.vct.sct.frt.lbtTCJ(  " T%C   (TC"TCCC@C g%C = define classC=defin c C=defi c  C  ~T#-C  T  Ta! ( TC"TCTCCC@C CXTCCX%pTCC=T CC\TCCX %lT CC = T T T"C>J(?%C  C  # #enddefine# T#-C !TCC& C& %eTCC\ %r<%C (##method#procedure#function# U T TCCC \TC(%TC=TC[%QTC=nT  / H+ C " 5 ##define## #class#  Ta1 ##procedure#method#function## T-2+ H@% CZ T r T CRC;  T6 CC=C* C# C=C& C&   T, add# #object#   T1 "C Celsenote I T "#<#function#procedure#endprocedure#endtext#note#else#otherwiseF#parameters#lparameters#enddefine#endfunction#endmethod#endif#endcase# ) T%# #endtext#% T!- !A T   T CC Z@T LOWER(Hostfile) = cHostfile AND Procline =   C7 T CC'.mT LOWER(Hostfile) = cHostfile AND LOWER(Executing) = [ ] AND ProcLine = iProcLineNo .vct%#, %. 'T CCC.\'* T C'*mT LOWER(Hostfile) = cHostfile AND LOWER(ObjClass) = [ ] AND ProcLine = iProcLineNo T C%.k 'T CCC.\. T . T C >PT AND [.]+RIGHT(ALLTR(Executing),CC Z) == [ ]T CC'*lT LOWER(Hostfile) = cHostfile AND ProcLine = iProcLineNo AND LOWER(ObjClass) = [ ] Hx  .8 T C%. .T .CCC.C\. T C >LT AND RIGHT(ALLTR(Executing),CC Z) == [ ] CC "T CC.C'.8T AND LOWER(Executing) = [ ] .$3T CCCCC.\.C'.8T AND LOWER(Executing) = [ ]2"T CC.C'.8T AND LOWER(Executing) = [ ]2%"TCC.C'.mT LOWER(Hostfile) = cHostfile AND LOWER(Executing) = [] AND ProcLine = iProcLineNo%C e F%#/LOCATE FOR &cFilter T0 %C+ 5CALCULATE AVG(Duration) FOR &cFilter TO nAverage T  T COUNT FOR &cFilter T #TC6T%texta T!a+TC#1C %#2  F%#/ >3 >4%C5>56 FBC#2  U7TCSOURCETCTARGETCSOURCECTARGETISELECTCTEXTCMEMONFIRSTNAVERAGEIPOSCTEMP IFILELINENOIOFFSET IPROCLINENOILINESCLINE CREALLINE IPOSCOMMENT IPOSOPENPAREN CHOSTFILECOBJECTCCLASS CFILETYPELINITIALMEMBERASSIGNMENTS IEXECUTED CEXECUTINGCFILTER CFIRSTWORDICOVERABLELINES ILINESCOVERED LRELTOPROC ISECONDWORD CSECONDWORDLINTEXT ILENFIRSTWORDTHISGETALIAS SOURCECODEHOSTFILE THISFORMSET ILENHOSTFILEOBJCLASS ILENOBJCLASSFILETYPELVFP5 CMARKEXECUTED ILENEXECUTINGLINPROFILEMODEDURATION MARKCODELINELERRORPROFILEDMARKED COVERABLECOVEREDCtcLinebC#CC tiExecutedbN CtnFirstbNC tnAveragebN% %CTC(X %#TCCCZCXHit !$TCCCZCXHits bTC1stCXCCC05.Ch"06.00ChCCCh\g  6ZTbTCAvgCXCCC05.Ch"06.00ChCCCh\g  6ZTT H5 C\TCC >X T  T 2 T BU TCLINE TIEXECUTEDTNFIRST TNAVERAGE CMARKEDLINECFIRSTCAVERAGETHISLINPROFILEMODE CMARKEXECUTEDCMARKNOTEXECUTED bCtC tcWhichPropbC 9CCfSOURCETARGETSKIPPEDCOVFILESPROJECT %CtAliasbC T"TCTHIS.cAlias BUTALIAS TCWHICHPROPCRETURN%CtcAddInbC> TVT%CpBaTCCfT-%.TCR T Ta %C  CC] ] H \% T-. CCCC\\] x%TCC\\; C$CCCC\\]  %TCC\\2 T-% Y\C%Add-In file specified does not exist.Coverage Profiler Problem %    H C%C.FXP0C.APP0 C.PRG0 C.EXE0 C.QPX0 C.QPR0 C.MPR0 C.MPX0 2\C%Add-In file specified does not exist.Coverage Profiler Problem T-H C.FXP.APP.PRG.EXE.QPX.QPR.MPR.MPX .SCX 2eC.Add-In file specified is not a supported type.Coverage Profiler Problem T-%   T-T TaTC@T-% { H(w  PC   oC 2w BUTCADDINLOKAY CFILETORUNCEXTTHISCADDINLERROR CLASSLIBRARYCAPPHOME DOMESSAGELUSINGREGISTRYLREGISTERADDINADDREGISTEREDADDINDELETEREGISTEREDADDIN B UTHISLERROR B UTHISLERRORy %C# BTCCLASSLIBvTC " T T T%C.T.VCX9%C ALIAS C IN  aTcC]%C:G~(]G~(i BUTCCLASSLIBNAME TCAPPNAMECALIASCLIBLIST CCLASSLIBNAMECAPPNAMECSYS16ILEVEL(TC ProfileMode&TC SmartPath$TCMarkAll)TC MarkExecuted,TCMarkNotExecuted*TC RegisterAddIn*TC CoverageFrame1T CStackXMLExtendedTree &T C StackXSLT  C B U THISLSTARTINPROFILEMODEGETREGISTRYKEYVALUE LSMARTPATHLMARKALLONLOAD CMARKEXECUTEDCMARKNOTEXECUTEDLREGISTERADDINLINCOVERAGEFRAMELSTACKXMLEXTENDEDTREE CSTACKXSLTSETMARKSLERROR   CtlBaseMonoFontbL+     &%CtoMemberHost.ClassbC T%TTCT  %TMono# T%p4%C oMemberHost.cdlCov_GetFont.ClassbUlT-T CCLASSLIBv% T T CC ]g%  C ]GCcdlCov_GetFontscov_CommonDialog COVERAGE.VCX% cC ]5%C "CALIAS CCLASSLIBv   T%fTTCTTCCf%T cdlCov_.%C oMemberHost. .ClassbUT-TCCLASSLIBv%C T `T CC ]g%  C ]>C scov_CommonFileDialog COVERAGE.VCX% C ]5%C "CALIAS CCLASSLIBv O  T T F TCG((Hostfile-~Ca %CTempQ  F C*o CQ TempF & FG-( -+C+ +%C.vct.sct.frt.lbt T > + H C' T Q G((- F CC-B UTCSOURCETCTARGETCSOURCECTARGETISELECTCORDERCFILETHIS LOCKSCREENS SHOWSTATUSGETALIASHOSTFILEFILLONETARGETRECORDTEMP SOURCECODEOBJHITSFILETYPEWHILEITARGETRECCOUNT CLEARSTATUSLERROR)TCTarget HI &CASE EMPTY(&cTarget..Hostfile)oBCASE THIS.lInProfileMode AND NOT EMPTY(&cTarget..Profiled) TaHCASE (NOT THIS.lInProfileMode) AND (NOT EMPTY(&cTarget..Marked)) Ta2 Ca'cObject = ALLTR(&cTarget..ObjClass) TCC!\oTHIS.ShowStatus("Marking source code for"+" "+ ALLTR(&cTarget..Hostfile)+"."+ ALLTR(cObject)+"...") TC %  %  #)C)A source code entry has no coverable codeC %or is a member of a container object.C C This record will be deleted.C C Coverage Profiler Problem  C C-B   U TCSOURCETCTARGET TLFILLINGALLLRETURNCTARGETCOBJECTTHISGETALIAS LOCKSCREENSMARKTARGETCOVERAGE DOMESSAGE CLEARSTATUSLERRORXC tcFileToAddbCCC] TC@G %C> T(CATCC'CCbCCCCΡ  %!% $TTG B U TCFILETOADD IADDINCOUNT CFILETOADDLFOUNDTHISAADDINSLERRORK%D!C ProfileModeC SmartPathCMarkAll"C MarkExecuted%CMarkNotExecuted#C RegisterAddInC StackXSLT *CStackXMLExtendedTree "C BaseFontName "C BaseFontSize "C BaseFontBold $CBaseFontItalic&CBaseMonoFontName&CBaseMonoFontSize&CBaseMonoFontBold(CBaseMonoFontItalicUTHISLUSINGREGISTRYSETREGISTRYKEYVALUELSTARTINPROFILEMODE LSMARTPATHLMARKALLONLOAD CMARKEXECUTEDCMARKNOTEXECUTEDLREGISTERADDIN CSTACKXSLTLSTACKXMLEXTENDEDTREE CBASEFONTNAME NBASEFONTSIZE LBASEFONTBOLDLBASEFONTITALICCBASEMONOFONTNAMENBASEMONOFONTSIZELBASEMONOFONTBOLDLBASEMONOFONTITALICBJ(%.(C*%CC %(CAddInCCZC TT(CAddInCCZC&"CAddInCCZ"" T B U IADDINNUMBERLIEMPTY LIKEYSSETTHISLUSINGREGISTRYAADDINSSETREGISTRYKEYVALUELERRORiG TCC@%OCG B UTCFILETODELETE IADDINNUMBERTHISAADDINSLERRORf%E5TC cov_frame COVERAGE.VCX C B UTHISLINCOVERAGEFRAMEOFRAMECAPPNAMESETFORMSETATTRIBUTESLERROR !%C tcWhichSuffixbCP Te T%CCC TDBF TTC.%TTC= TTC1%CC] +CC] TTCCCZ BC@U TCWHICHSUFFIX TCWHICHEXTIPOSCSUFFIXCDBFSTEM CTABLENAMECEXTTHIS CSOURCEFILE J(%CCC]f=ONi(TCC]C\C]\(TCC]C\C]\% PROCEDURETC \%TCC \(lTCC]f&%CCRAPPEXEDLLhT!% PROCEDURETC \%TCC \BaUCSYS16ILEVELTHISCAPPNAMECAPPHOME%$TC FrameHeight!TCFrameTop"TC FrameLeft#TC FrameWidth B U THISLINCOVERAGEFRAMEOFRAMEHEIGHTGETREGISTRYKEYVALUETOPLEFTWIDTHLERROR% C  CFrameTopC FrameLeftC FrameWidthC FrameHeight C B U THISLINCOVERAGEFRAMEOFRAMESETREGISTRYKEYVALUETOPLEFTWIDTHHEIGHTRELEASELERRORM/C!COCfFORM  )%C COVERAGE.VCX0  C cB TcusC]%C%CfFORM9Ccov_SavePosition COVERAGE.VCXF9Ccov_SavePosition COVERAGE.VCXU TOFORMREF BASECLASSTHISCAPPNAME LCOBJNAMELOFORMFORMS NEWOBJECT\TC %ATCB UTCLOGLRETURNTHIS GETSTACKXMLDISPLAYSTACKXMLLERROR%B-u     A !"#$%&'()*+%C CC T , T Ca-DC#Loading log for StackLevel analysis:  .... TaT/- TCWTCDELETEDvON %GFTSCC] R%C Qh0C1I2I3N4C05.Ch"06.00ChCCCh\g  65C6F T  T TT"C %" TC7.TC@8+C"  T!C"%C!N.%C !a, u.T&CC gT'C T(C T)C T*CC g%C) T+.CC)@ T+ T- H*  T#CCCC+.fxp.mpx.qpx.spxwCC'CC( C(6QCC(=.C.( %C'CC.(.66C(6C(6 Ta * T#CCCC+.fxp.mpx.qpx.spxwCC'CC( C(6QCC(=.C.( %C'CC.(.66C(6C(6 Ta * %* TaTC#*T C\%C C# \CCCC+.fxp.mpx.qpx.spxwCC'CC( C(6QCC(=.C.( %C'CC.(.66C(6C(6 Ta * CCCC+.fxp.mpx.qpx.spxwCC'CC( C(6QCC(=.C.( %C'CC.(.66C(6C(6  %* T,TC#*TC\T#CCCC+.fxp.mpx.qpx.spxwCC'CC( C(6QCC(=.C.( %C'CC.(.66C(6C(6 Ta2 T- T& % T *TCCC+.fxp.mpx.qpx.spxwCC'CC( C(6QCC(=.C.( %C'CC.(.66C(6C(6TC8+ T )%- TC8gr51032CCC @CC .CCC @6  >33 C"+ LCLog file unavailable.Coverage Profiler Problem: T-&%C  CN   VCLog file has no usable records.Coverage Profiler Problem: T- %>CGenerating StackLevel XML for  ... . F TCN T#) TCMicrosoft.XMLDomNoC<VFPCallStackLog-CC, &!{}%$^',()~+=@`"[]_/>; T ~TC0"TC eventC06%C5 + T-C5TCCX- HT L  TaT< 2 %= T- TaT< 2 0%=  T-, TaT> 2 Y Ta T2L (25%CC StackLevel?g2 C>@ !T>$%CC StackLevel?g2T> T%=5 T-H Ta %O T%A %2Y T# T$!T%C StackLevelBC%C%T$/DU (C%EgQ%C#@$!T$/#D$T##>vT$/D9TC$/ [@StackLevel=C2_]F%CTCGC StackLevelC2_H% $CRunsForC3_H,%A }%2qC TimesCalled1HyCI>% 4CRunsForCCC@RunsForFJg3_H%2A  :<C TimesCalledCCC @TimesCalledFJg_H T T 2TCO d% TC8ICGenerating StackLevel XML for  ... C_%. %%A,!T C_STACKXXMLKT T C_STACKXMLK%L T C ;Please specify location to save Coverage StackLevel XML for XML Files (*.xml)|*.xml PUTFILEM%C %CC ]  TN BCWriting StackLevel XML to disk: N....CON T-%C Q F %G  CPC--T/- BUQTCLOGTHISLVFP5LISELECT LLDELETEDLCFILTERLCORDER LCSTACKALIASLATEMPLIINDEXLCSTACKLCFILE LCSOURCEFILE LISTACKLEVELLCLASTEXECUTINGLCEXECUTINGSTACKLIPOSLLADDLITYPE LNDURATIONLLEVENTLOXMLLONODELCTAGLOPARENT LOTHISNODELLRETURN LNPERCENTLIRECS LIPERCENTLIMAXLINELENGTH LILINEITEMSLALINELCLINELIHANDLE LOANCESTERLCPATHEDPARENTLOPARENTSTACKATTRIBDURATIONOBJCLASS EXECUTINGHOSTFILE STACKLEVELFILETYPE CSOURCEFILE LOCKSCREENS SHOWSTATUSLERRORFNAMEFTYPEFSTACK FDURATION ILENDURATIONFLEVEL ILENEXECUTING CSOURCEALIAS AFILETYPESIN DOMESSAGELOADXMLDOCUMENTELEMENTTAGNAME PARENTNODE GETATTRIBUTE OWNERDOCUMENTLSTACKXMLEXTENDEDTREE ATTRIBUTES GETNAMEDITEMNODENAMEVALUESELECTSINGLENODE CREATEELEMENT SETATTRIBUTE APPENDCHILD NODEVALUE GETTABLENAME LUNATTENDEDGETRESOURCELOCATIONCSAVEDSTACKXMLXML CLEARSTATUS T T-%C CC CC] jT %C CC]  +| ShellExecuteASHELL32%TCopenB    U TCXMLFILELCFILE LIRETURNVALUETHISCSAVEDSTACKXML SHELLEXECUTEASHELL32LERROR&T B UTHISLSTACKXMLEXTENDEDTREELERROR#   T a$%CC CC] uT  T$%CC CC] LTC)Please specify an XSL Transformation fileXSL Transforms (*.xsl;*.xslt)|*.xsl;*.xslt| All Files (*.*)|*.*GETFILE $%CC CC]  T - % 9%%CC CC] T  T%%CC CC] 5T C  % 1T  %  TCMicrosoft.XMLDOMN %CC   T - %  TCMicrosoft.XMLDOMN %CC   T - % FT C%C C B T - %  %CCC  TC%CCӡTChtmT  T TC_XSLHTM T  %  TC4Please specify location to save transformed file for HTML Files) (*.htm;*.html;*.txt)|*.htm;*.html;*.txt| All Files (*.*)|*.*PUTFILE %C T - % %CC] " AC Writing transformed file to disk: ... C % C J(B   UTCXSLTTCXMLINTCXMLOUTTLNOSHOWLCXSLT LCINPUTFILE LCOUTPUTFILEOXSLOXMLLCRESULT LLSUCCESS LCSAVESOURCETHIS CSTACKXSLTGETRESOURCELOCATIONCSAVEDSTACKXML GETSTACKXMLLOAD TRANSFORMNODE CSOURCEFILE GETTABLENAME LUNATTENDED SHOWSTATUSDISPLAYSTACKXMLLERROR=%$Ge T-t& B UTHISLTURNEDOFFTRACELERRORt%C TRBETWEENvON2GeTa7J( _oCoverage C B UTHISLTURNEDOFFTRACE _OCOVERAGESUSPENDCOVERAGELERRORD C%6Ge T-<UTHISRESUMECOVERAGELTURNEDOFFTRACE _OCOVERAGE TC$%C TT a C %CTC @TC@ T-T a% C  T- %y% _TC% [TCuT-% C  T- %%CTT%C   T- %%% C W T-% C  T-% C  T-% C  T-% C  T- %97J( _oCoveraget%C p CT CB U TCFILE TLUNATTENDEDTCADDINLRETURNLCFILELOFORMTHISPASSEDPROPERPARAMS LUNATTENDEDLIGNORECOVERAGEFILENAMES SETAPPHOME CSUSPENDEDLOG LUSINGOCXSSETWORKOPTIONS CREATEFORMSLSAVEFORMPOSITIONSADDFORMPOSITIONSAVERLINCOVERAGEFRAMESETUPWORKFILESCADDINRUNADDINSAVETARGETTODISKCREATESKIPPEDCURSORSAVESKIPPEDCURSOR GETSTACKXML SETUIOPTIONS _OCOVERAGEFORMSRELEASEOFRAMERESUMECOVERAGELERROR COVERAGE.H COV_CHAR.H COV_LOCS.H COV_DLGS.H COV_SPEC.H COV_REGS.H COV_TUNE.H G;(.G2 G$( G GG.G GC(%C TRBETWEENvONGeT a   %C  R 9%C fTOOLBAR~% z T a!%  C .Forms'%C fTOOLBAR   T a! % t,) 5R,:CCoverage Profiler already active!=B-%CC  {B- B UCOVERAGEHCOV_CHARCOV_LOCSCOV_DLGSCOV_SPECCOV_REGSCOV_TUNETHISLTURNEDOFFTRACEATEMPOFORM LFOUNDWINDOWCLASSFORMS BASECLASS WINDOWTYPEVISIBLENAMESUSPENDCOVERAGEFILLFILETYPEARRAYLERRORCl%C CfRUNADDIN   CUNERRORCMETHODNLINETHISRELEASE4 CT C BCUTHISSAVEFORMSETATTRIBUTESOFRAMESETREGISTEREDADDINSU NLOCATIONUUOSOURCENXCOORDNYCOORD B UTHISLERROR B UNSTYLETHISLERROR domessage,setuitoshowfilestatessetmarkssetuitoshowcodeJ setuifonts setuioptionspassedproperparams setlogfile*suspendcoverageresumecoveragesourcefileislog*fillfiletypearraycreatecoveragefilenamecursorDsetupworkfilesGcreateskippedcursorsaveskippedcursorN createsourcecursor!adjustsourcecursor\%createtargetcursor%adjusttargetcursor)adjustcoveragefilenamecursor(*savetargettodiskJ*fillonetargetrecord-fillsourcecursor;addpaths@sourceavailableAmarktargetcoverage?G markcodelineZgetalias.^runaddin%_filterlistbylocationZeorderlistbytime|esetclasslibtoaliasesetworkoptionsqggetfontsfromuserisetregistrykeyvaluesgetregistrykeyvaluewugetresourcelocationxfillcoveragefilenamecursor̃togglecoverageprofilemodeshowstatisticsshowprojectstatisticsцgetprojectstatisticsdisplayprojectstatistics setfontvalues lockscreensrgetregisteredaddinsK showstatus{ clearstatusimarkalltargetrecordsȖfilltargetcursor=markonetargetrecord"addregisteredaddinݠsaveoptionstoregistry~setregisteredaddins deleteregisteredaddin createformsO gettablename setapphomesetformsetattributes saveformsetattributes)addformpositionsaverT showstackxml getstackxmldisplaystackxml=togglestackxmlextendedtreetransformstackxml DeactivateActivate,UnloadInit[LoadError(DestroyCOV_TOOLBAR.DockiCOV_TOOLBAR.DblClickCOV_TOOLBAR.DragDropCOV_TOOLBAR.ActivateCOV_TOOLBAR.Show1rrAQARaA43qdA433qA1qAAA3ryA4q2s!aSAAAAAAAR*!BAAq!AA4!aE3q2qARABaaAA4"QQ!A&"42RBACA3e4u!AAB4"qARqA qAA1ARAA2#ArABBRQB4Aaa4q2qABA4qA ) ARBB3q4AN! B|"B3q43qQA!#1A!A!AAAAB5DA!AA3#qAAAAQ BAAAAAABaqaAA$eAAAAAABAA2QABAsQqQAAEACAAAA44q5taa!aQD5cSaA!CAAAAbA4q qRAA42rPA!a2CArFA11qAAR!AArAB5q!AQb"A}AtAAAABAAAAAAARAAA1aA1aAARBAcv AQrR#qQA"qA"r"!AR""4"BB!BRAaA2RAB CArABr41b1qp3CA$#AAAAA3$r!A3qAqA"!A!QQABBAbRAB!AqCA433AqqQAQAAE4bBb4`bAAAABqQAAvASAAABAABbaA( !A1aa1a!ABB3#AAR!!!AU4r!!!AaAHR"ABA51AA4bAAAqQAAASAABABAA2AAaHAbaAB"4rqAqQqqQRAABRBA4`!##32A1QAAA33qAA4AQAsa!aAAAA1AAaAB33C}bQ!AAAAAAAAB!A3qA3aAAA3qAA3QA3rdAAaAAA4reAAdB1AqAAAAA4a"qr AAAR4q!aAAAAbBb4!Q1$!!AaaaN3A#AAB4qrb!Ab4_C3rAAbAAbqAA4rAQABaAAAQAr2A!1AA6AA3qAAq#AAA7qqQAA3qrAWABaAA!r"ABAB11qAR  aaaa AA2 aaA B aAwBHBebBR"A!!AAAAuRAAAAAAAAR!AAAAQAAQGKABAABARRABBAAbA!QBBAaA2qBSB2S213CAC BCARARAAAAAAAQAA!aA! AAAAaAAAR2aAQ3aAt3RaAq5B!AAAq!ABAA!AAAAAAAAAAs!AAAB4%!!!!!!aaaaaaAAAAAArAAAAAQqArB3RA43qA2A2A2A3qA2Lx> d6">$(b J1  Y97 rp'zw'(+g#,.&.88 ;"4;=3>=%F1NNF JyR2JhTnTTq%UUsU\ ?\EB?#t}Ag֩(vK DWc<ggEk8a$I!%/;{(Rb# #<[ 7<@' ?&AzCN VCCh X D!Em `LEQSx SS T^ ^_? `aM bc] cWdn dgw #hn On$s jMsv v}/ }Z ‚z    P |؏  ]G AQ g!D5$l"<qCxLi Kf[9 w~ I p   Jv )x ||%3UT T- H@ CaTT T  T  #T CCZ  C2UOLABELTHISFORMLBLSHOWFIXEDFONTOCOVERAGEENGINELERRORGETFONTSFROMUSERFONTNAMECBASEMONOFONTNAMEFONTSIZENBASEMONOFONTSIZE FONTITALICLBASEMONOFONTITALICFONTBOLDLBASEMONOFONTBOLDCAPTIONDISABLEFONTSETTINGBUTTONSClick,1q2BB5)|v ]]%UT H4 C-TTT  T  #T  CCZ  C2UOLABELTHISFORMLBLSHOWBASEFONTOCOVERAGEENGINEGETFONTSFROMUSERFONTNAME CBASEFONTNAMEFONTSIZE NBASEFONTSIZE FONTITALICLBASEFONTITALICFONTBOLD LBASEFONTBOLDCAPTIONLERRORDISABLEFONTSETTINGBUTTONSClick,1q2BB3u)] X%~ U TC)Please specify an XSL Transformation fileXSL Transforms (*.xsl;*.xslt)|*.xsl;*.xslt| All Files (*.*)|*.*GETFILE%CC] CTULCFILETHISFORMOCOVERAGEENGINEGETRESOURCELOCATION CXSLTFILENAMESETSTACKXSLTDISPLAYNAMEClick,1q aAA5)h OOȪ%|U0TTTT  T  T ITCC Cg _ 6ITCC Cg _ 6 B UTHISOCOVERAGEENGINELSTACKXMLEXTENDEDTREECHKEXTENDEDSTACKXMLVALUE CSTACKXSLT CXSLTFILENAME LSMARTPATH CHKSMARTPATHLREGISTERADDINCHKREGISTERADDINSLMARKALLONLOADCHKMARKALLONLOADLSTARTINPROFILEMODE OPGSTARTMODE CMARKEXECUTED TXTEXECUTEDCMARKNOTEXECUTEDTXTNOTEXECUTEDLERROR TT>CT  T  T T "T C6"T C6T T TTTT T!T"T#T$T%T&T' T()T*!T+"T,#&CFontName)textbox-T)#T. CCZ#T. CCZU/ OBASELABEL OFIXEDLABELTHISLBLSHOWBASEFONTLBLSHOWFIXEDFONTOCOVERAGEENGINESETSTACKXSLTDISPLAYNAME CSTACKXSLTCHKEXTENDEDSTACKXMLVALUELSTACKXMLEXTENDEDTREE CHKSMARTPATH LSMARTPATHCHKREGISTERADDINSLREGISTERADDINCHKMARKALLONLOADLMARKALLONLOAD OPGSTARTMODELSTARTINPROFILEMODEOPGFRAMELINCOVERAGEFRAME TXTEXECUTED CMARKEXECUTEDTXTNOTEXECUTEDCMARKNOTEXECUTEDFONTNAME CBASEFONTNAMEFONTSIZE NBASEFONTSIZE FONTITALICLBASEFONTITALICFONTBOLD LBASEFONTBOLDNBASEMONOFONTSIZELBASEMONOFONTITALICLBASEMONOFONTBOLDSAVEDBASEFONTNAMESAVEDBASEFONTSIZESAVEDBASEFONTITALICSAVEDBASEFONTBOLDSAVEDFIXEDFONTNAMECBASEMONOFONTNAMESAVEDFIXEDFONTSIZESAVEDFIXEDFONTITALICSAVEDFIXEDFONTBOLDSETALLCAPTIONTTTT T  T  TT B UTHISOCOVERAGEENGINE CBASEFONTNAMESAVEDBASEFONTNAME NBASEFONTSIZESAVEDBASEFONTSIZELBASEFONTITALICSAVEDBASEFONTITALIC LBASEFONTBOLDSAVEDBASEFONTBOLDCBASEMONOFONTNAMESAVEDFIXEDFONTNAMENBASEMONOFONTSIZESAVEDFIXEDFONTSIZELBASEMONOFONTITALICSAVEDFIXEDFONTITALICLBASEMONOFONTBOLDSAVEDFIXEDFONTBOLDLERRORJ-(UTHIS CMDBASEFONTENABLED CMDFIXEDFONT  T%CCC FTCCCB6C I6$ wTCT  BaU TCFILENAMELCFILELICHARSTHISFORM LBLSTACKXSLTWIDTHFONTNAMEFONTSIZEFONTBOLD FONTITALICTHISCAPTION.CUNERRORCMETHODNLINETHISOCOVERAGEENGINEERRORTC %1TCoverage Profiler OptionsTOKTCancelTOptions&TUse \(  Hc2 CTHIS.nCurrentKeybN   B C m.cValueNamebC B.T C  %  B %8 BT C  = BU CVALUENAME CKEYVALUE LPDWRESERVEDLPDWTYPELPBDATALPCBDATANERRCODETHIS NCURRENTKEYREGQUERYVALUEEXP   H#2 CTHIS.nCurrentKeybN  _ B6 C m.cValueNamebCCm.cValuebC  B! C C >  BT C TC >.T C   % @ B  BU CVALUENAMECVALUE NVALUESIZENERRCODETHIS NCURRENTKEY REGSETVALUEEXI  TT C  B UNUSERKEYCKEYPATHNERRNUM REGDELETEKEY& T T T)%C C m.lEnumKeysbL  T-T C   %  B % TC TC  C B U AREGOPTSCOPTPATHNUSERKEY LENUMKEYSIPOSCOPTKEYCOPTIONNERRNUMTHISOPENKEYENUMKEYS ENUMKEYVALUESCLOSEKEY^ TC % H CB UCKEYNAMENREGKEYNERRNUMTHISOPENKEYCLOSEKEY T  +a TTCdXTC >TCdXTC >TCdX3T C  H ! !TC TC C >=%CC lCTC T !%   T  B U AKEYNAMES NKEYENTRYCNEWKEYCNEWSIZECBUFNBUFLENCRETTIMENKEYSIZENERRCODE REGENUMKEYEXTHIS NCURRENTKEY J(2%CTHIS.nCurrentKeybN  } B%  B +aJ(JCX(JC>( JC>( 4TC   H;j S! j!T  $T C  = H (T C  = 4#T *Binary* m(T C  =2)T *Unknown type*!%   T  B U AKEYVALUES LPSZVALUE LPCCHVALUE LPDWRESERVEDLPDWTYPELPBDATALPCBDATANERRCODE NKEYENTRY LARRAYPASSEDTHIS NCURRENTKEY NCURRENTOSOS_W32S REGENUMVALUET  H 3 24 3 C Windows 3CJ ZB-" C Windows NTCJTT ADVAPI32.DLL2TT ADVAPI32.DLL B UTHISNUSERKEY NCURRENTOS CREGDLLFILELERROR loadregfuncs,openkeyclosekey4 setregkey getregkey getkeyvalue setkeyvalue deletekey enumoptions iskeyenumkeys@ enumkeyvaluesInit/11ASAsCSsDE52"A1A!AA"A"5451S1A5511A4r1!A3AA4!aAS3A4q421A1ARRA41A4q2AA1AAAAA1AA6s"ACARACAA1AA2SA2AAA412q!A3<Z< <4[ h8 pER@gy70!=Vu+!$O!'M())4@@ '@'@%7>>69U,%CTHIS.frmMainDialog.ClassbCTCTarget%CC%C+ #CO CUCTARGETTHISGETALIAS FRMMAINDIALOGTOGGLEPREVIEWZOOMMODENOTIFYTARGETRECORDCHANGED H * CTHIS.frmZoom.BaseClassbC7"    iC"    %T% CR%C #C     ,T C %C%T  C2 B U THIS FRMMAINDIALOG LINZOOMMODEFRMZOOMVISIBLEHIDE WINDOWSTATESHOWTOPHEIGHTLEFTWIDTHLERRORTCTarget%C >B%|*lNoCodeYet = EMPTY(&cTarget..Profiled) (lNoCodeYet = EMPTY(&cTarget..Marked) $%   TC %(cCaption = ALLTR(&cTarget..ObjClass) %Ce(TAll Classes, Objects, Procs%!TCC!\  %;T -Fast Mode: DoubleClick/Enter on List for CodeVS.Caption = "Marked Code For" + +" "+ALLTR(&cTarget..Hostfile)+ ": "+cCaption T  C%  TaCT  B UCTARGET LNOCODEYETCCAPTIONTHISGETALIASLINPROFILEMODE FRMMAINDIALOG LINZOOMMODE LFASTZOOMMODEMARKONETARGETRECORDFRMZOOMCAPTIONEDTCODESELSTARTREFRESHVISIBLELERROR  C C "CtcWhichDialogClassbCCtcWhichClassLibbC %C t&TC T T C 5%C "CALIAS CCLASSLIBv V %    C  Ta # F C %    C1You have chosen to mark all records on load, but C 7some records in the current log may not be marked yet. C C 'Would you like to mark all records now?4Coverage Profilerx  C  C B  ULRETURN LPROFILEMODECMARKCMARKNOTCTARGETISELECTIRECNOLMARKALLLALREADYREMARKEDTHIS CMARKEXECUTEDCMARKNOTEXECUTEDLMARKALLONLOADSHOWMODALDIALOG SETUIFONTSSETMARKSGETALIASMARKEDALLLINPROFILEMODEMARKALLTARGETRECORDSNOTIFYTARGETRECORDCHANGEDLERROR!  %+ TC%\/:x/:%C  t,#TCC\\%CR.TCC>=%Cz,(U TLFROMMODALDIALOG WONTOPWIND WSOURCELOGTHISLINCOVERAGEFRAME CSOURCEFILEOFRAMENAMESCREENTCSourceTCSkipped%C%C CCN # TCW TC F% :'  :' z,( F%C  t,~SCNo log entries were skipped.@Coverage Profiler  Informationx B U CSOURCECALIASISELECT WONTOPWINDTHISGETALIASCREATESKIPPEDCURSORLINCOVERAGEFRAMEOFRAMENAMESCREENLERROR%3      TTCfT C %TCCSkippedf%C  T$TCCC\\f%C  TT CCf T  9 H? F     C fTOOLBAR  T    T  2 %C fCf!  T  T%C n% Q T jT%C %  T T (%T T T&T C$ %C     ,6%C     z,(z,(%C    2,6z,(%C , 9z, ( C$ B UTHISLINCOVERAGEFRAMEWFRAMEICHILD WCHILDWINDOWNPOS NPOSFOXELSCALIAS CSOURCEWINDINUMBERWINDOWS WONTOPWIND WFRAMETOPWINDOFORMNSTAGGERAWINDOWCOLLECTIONOFRAMENAMEGETALIAS CSOURCEFILEFORMS SHOWWINDOWVISIBLE WINDOWSTATE BASECLASSLEFTTOPFONTNAMEFONTSIZELERROR9T % 2 CUTHIS LFASTZOOMMODENOTIFYTARGETRECORDCHANGEDj% C-t&0%CTHIS.frmFindDialog.BaseClassbCCC frmFindDialogcov_finddialog COVERAGE.VCX5%C "CALIAS CCLASSLIBv  C%C %CTTTB   UTCTEXTTLCASESENSITIVE TLFINDAGAINLIPOSLODIALOG LCTEXTBEFORE LIINCIDENTLLFOUNDLOWONTOPTHIS FRMMAINDIALOG LINZOOMMODEFRMZOOM FRMFINDDIALOGEDTCODESELSTARTVALUE SELLENGTHSETFOCUSPARENTTOPHEIGHTLERROR %C%TCZoomMode%`CCCB-ULLZOOMTHISGETREGISTRYKEYVALUE FRMMAINDIALOG LINZOOMMODETOGGLEPREVIEWZOOMMODERESIZEFRMZOOM4GUI( wq COVSHORT.MPRGUI(<UCOVSHORTMPR TCTargetTCOC#%  CU TCSOURCETCTARGET TCPROJECTIRECNOCTARGETTHISGETALIASLERRORNOTIFYTARGETRECORDCHANGEDTCProject %C %C C 0  T  COV_PJX.FRXTCFORMN?T Coverage ProfilerStatistics by \ m;>{?Qy??`~&@SAgAHvHWIIOJpJfNNQQZZC\[ e\Fblrbc)cXd,sdhe3ee)'@ f%1UTTTC%TCDTT C%T  T TT  B UNCONTAINERWIDTHNCONTAINERSPACERNCONTAINERHEIGHTOCONTROLTHIS BORDERWIDTHCONTROLSHEIGHTLEFTTOPWIDTHTHISFORM NTOOLCOUNT CONTROLCOUNTLERROR B UTHISLERRORTa)%CTHISFORMSET.BaseClassbCj$C:{ UNERRORCMETHODNLINETHISLERROR THISFORMSETERRORNAME synchsizes,InitError1rA"1AAA233AA2$?]yH#) \%NU CU THISFORMSETSTANDARDRIGHTCLICK C CU THISFORMSETMARKONETARGETRECORDNOTIFYTARGETRECORDCHANGED CU THISFORMSETNOTIFYTARGETRECORDCHANGED*TBUNBUTTONNSHIFTNXCOORDNYCOORDTHISFORMILISTMOUSESTART +%C[T sT(% C%  T T  C U NBUTTONNSHIFTNXCOORDNYCOORDTHISFORMILEFTLISTCOLWIDTHNMARGINTHIS MOUSEPOINTERWIDTHILISTMOUSESTARTADJUSTLISTCOLUMNWIDTHS0C B UOSOURCENXCOORDNYCOORDTHISFORMRESPONDTOSPLITTERTHISLERROR RightClick,ValidaInteractiveChange MouseDown MouseMovegDragDrop13851B31BAB32;W8 A`:) %4 {U2%C C B UTHISFORMTOGGLEPREVIEWZOOMMODE THISFORMSETNOTIFYTARGETRECORDCHANGEDTHISLERROR(T Preview Mode BCUTHIS TOOLTIPTEXT%T Zoom Mode BCUTHIS TOOLTIPTEXTInteractiveChange, Option1.Init Option2.Init1B332 *l) %@ U- CC B U THISFORMSETTOGGLECOVERAGEPROFILEMODETHISFORMLSTAVAILABLEOBJECTSANDPROCSVALIDTHISLERROR)T Coverage Mode BCUTHIS TOOLTIPTEXT(T Profile Mode BCUTHIS TOOLTIPTEXTInteractiveChange, Option1.Init Option2.Init1332 ,u )S ::%U#TOptions BCUTHIS TOOLTIPTEXT C B U THISFORMSETGETOPTIONSFROMUSERTHISLERRORInit,Clickf1r32Rn): <%N 8U#TAdd-Ins BCUTHIS TOOLTIPTEXTr2TCcov_addindialog COVERAGE.VCX %WTCB ULRETURN THISFORMSETSHOWMODALDIALOGRUNADDINTHISLERRORInit,Clickf1r3q"AB2Qm<)R 99%U&T Statistics BCUTHIS TOOLTIPTEXT C B U THISFORMSETSHOWSTATISTICSTHISLERRORInit,Clicki132Uq)9N 55Kh%U TSave BCUTHIS TOOLTIPTEXT C B U THISFORMSETSAVETARGETTODISKTHISLERRORInit,Clickc1A43Uq)5L 339%U TOpen BCUTHIS TOOLTIPTEXT C B U THISFORMSETSETUPWORKFILESTHISLERRORInit,Clickc1A32Pl)3X ??H%1dU CU THISFORMSETSTANDARDRIGHTCLICK C B UTHIS SYNCHSIZESLERRORTC5%C!THIS.opgCoverageProfileMode.ClassbC*& T%C TT -T  T  T T T T 1%CTHIS.opgPreviewZoomMode.ClassbC1- T%C TT -T  T  T T T T  C'TC  DT ULOBUTTONLNWIDTHLOMODELCONTROLTHISCONTROLSOPGCOVERAGEPROFILEMODEBUTTONSPICTURECAPTIONAUTOSIZEHEIGHTWIDTHTOPLEFTOPGPREVIEWZOOMMODETHISFORMMINWIDTH MINHEIGHT'CUNERRORCMETHODNLINE RightClick,Inita synchsizesError133BS111AAAAA111AAAAAsq5Q2;V .<>)? ~~_%UU *J(|J('J( TcT"J( J ( C U THISNMARGINEDTCODELEFTLSTAVAILABLEOBJECTSANDPROCSCNTTOOLSHEIGHTTOPWIDTH SHPSPLITTERNLASTSPLITTERPOSITIONADJUSTLISTCOLUMNWIDTHS$ TC%TC%%)TCC%F)TC?FT C%T C % "TC9?F"TC9?F B U THIS MAXHEIGHTNMARGINMAXWIDTHPARENTLINCOVERAGEFRAMEWIDTHOFRAMEHEIGHTLEFTTOPLERROR'T? HB  fT CT2T C B U NYCOORDLNHIGHESTALLOWABLETHISNLISTROWHEIGHTLSTAVAILABLEOBJECTSANDPROCSTOP SHPSPLITTERHEIGHTNMARGIN SYNCHSIZESLERRORT %>C%(TC% 'T B U THIS LINZOOMMODERESPONDTOSPLITTERHEIGHTNMARGINNLASTSPLITTERPOSITIONLSTAVAILABLEOBJECTSANDPROCSTOPEDTCODELERROR$%CnLeftColumnWidthbN;Ty*TCCZ,CCZUNLEFTCOLUMNWIDTHTHISILEFTLISTCOLWIDTHLSTAVAILABLEOBJECTSANDPROCS COLUMNWIDTHSWIDTHCtcClassbCTtoolC]C/%CTHIS.cntTools..NamebC,Ja(THIS.cntTools..VisibleCB UTCCLASSCNAMETHISCNTTOOLS ADDOBJECT SYNCHSIZESLERRORPI9TC$C$C$UTHISLSTAVAILABLEOBJECTSANDPROCSNLISTROWHEIGHTFONTNAMEFONTSIZE CU THISFORMSETSTANDARDRIGHTCLICK %4 C% bT&T    v H+/ CTHIS.Parent.iTargetReccountbNT CTCN2+TT?)T C   DTCCDDT %  TCF HY  T    CT  2YT T  T % T  T   T *T    4T C     D%  'T    T  T 'TC 6 C B ULNMAXLISTHEIGHTLNPROPOSEDLISTHEIGHTLNMINIMUMLISTHEIGHTLICOUNTTHISNLISTROWHEIGHTSETLISTROWHEIGHTPARENTITARGETRECCOUNT LINZOOMMODE SHPSPLITTERTOPHEIGHTNMARGINLSTAVAILABLEOBJECTSANDPROCS CTARGETALIAS LISTCOUNTEDTCODEVISIBLE MOUSEPOINTERNLASTSPLITTERPOSITIONCNTTOOLSOPGPREVIEWZOOMMODEVALUE THISFORMSETSYNCHZOOMWINDOWSTATELERRORP%<C B U OSOURCENXCOORDNYCOORDTHISHEIGHTNMARGINTHISFORMRESPONDTOSPLITTERLERROR [C THISFORMSETbOCb 'CLIGNORECOVERAGEFILENAMES TCTC,9 TC % C C,9B U ATEMP THISFORMSETLRETURNIROWICOLNAMETHISSETINITIALFORMPROPERTIESSETINITIALCONTROLPROPERTIESLERROR C%ICT,J(  C "T %  T  C  B UTHISCNTTOOLS CONTROLCOUNT NTOOLCOUNT SYNCHSIZESCNTOOLSWIDTHNMARGINEDTCODELSTAVAILABLEOBJECTSANDPROCSADJUSTLISTCOLUMNWIDTHS SHPSPLITTERNLASTSPLITTERPOSITIONHEIGHTRESPONDTOSPLITTERTOPLERROR'CUNERRORCMETHODNLINE  %C:TCTHIS..WidthCTHIS..Left:TCTHIS..TopCTHIS..HeightTCD B UCNAMECCLASSNWIDTHNHEIGHTTHISMINWIDTHLERROR4 %]- CUNKEYCODE NSHIFTALTCTRL THISFORMSETSTANDARDRIGHTCLICKsetinitialcontrolproperties,setinitialformpropertiesrespondtosplitter`togglepreviewzoommodeadjustlistcolumnwidthsNaddtool/setlistrowheightG RightClick synchsizes DragDropInitCResizeError AddObject KeyPress1sA!A#b5aa2!!AB3qrr22A3AA1sAA4qAAA4qrrB5A236BAq1Ad1QQAAsAB2bCsA2Br3A3$!AB3aA"Ab3Q3QAA3AA2'"J3+W I9 dA $qLK?P`R^}(C  6#"R##=#.%BM%%P)~< ##h(%UCaUTHISFORMCHECKFINDBUTTON CUTHISINTERACTIVECHANGEInteractiveChange,ProgrammaticChange\121:c{)#y ``%U# C SourcecodeUTHISFORM FIELDTOSEARCHTHISVALUE# C SourceCodeUTHISFORM FIELDTOSEARCHTHISVALUEProgrammaticChange,InteractiveChangey132Px)`u \\%U!CHostfileUTHISFORM FIELDTOSEARCHTHISVALUE!CHostfileUTHISFORM FIELDTOSEARCHTHISVALUEProgrammaticChange,InteractiveChangew132Nv)\u \\%U!CObjClassUTHISFORM FIELDTOSEARCHTHISVALUE!CObjClassUTHISFORM FIELDTOSEARCHTHISVALUEProgrammaticChange,InteractiveChangew142Px)\( 8%9U CCaUTHISFORMCHECKFINDBUTTON CCaUTHISFORMCHECKFINDBUTTONf %CP% LCB-_B-UNKEYCODE NSHIFTALTCTRLTHISFORMCMDOKCLICKProgrammaticChange,InteractiveChangeeKeyPress133QEqAqA2Jr) ) Q 8 8 ˻%R i U !T[|]+CCf+[|] % HM CoT CT+2%C TCTCTC++++C=+PTC\+CR+!TCC>=CaU TCWHICHFIELDTLSEARCHTHISFIELD LCWHICHFIELDTHISCFIELDSTOSEARCHCHECKFINDBUTTON^ %-T\ 02QT!ATC(ALLTR(THIS.txtSearch.Value), EVAL(THIS.cFieldsToSearch)) > 0&LOCATE REST FOR &lcLocateCriterion % C+ P#)*LOCATE REST FOR &lcLocateCriterion  %C4CO   T Find \> %U  TC % TC%TCHeight"TCTop#TCLeft$T CWidth B  U LLRETURN LCFORMNAME THISFORMSETTHISFORMNAMEHEIGHTGETREGISTRYKEYVALUETOPLEFTWIDTHTHISLERRORTC CHeightCTopCWidthCLeft CU LCFORMNAMETHISFORMNAME THISFORMSETSETREGISTRYKEYVALUEHEIGHTTOPWIDTHLEFTInit,Destroy1"Q!1ABBR3q"B2-K)> qqR%$UCUTHISOCOVERAGEENGINESTANDARDRIGHTCLICKE.%CTHIS.oCoverageEngine.ClassbC>CUTHISOCOVERAGEENGINE DEACTIVATETUTHISOCOVERAGEENGINE bCtoEngineRef.BaseclassbCCb 'CLIGNORECOVERAGEFILENAMES T,TC Coverage Profiler | GetSysColorWin32APITC U TOENGINEREFATEMPTHISOCOVERAGEENGINECAPTIONNAME GETSYSCOLORWIN32API BACKCOLORl%e2%CTHIS.oCoverageEngine.BaseClassbCaT CUTHIS RELEASETYPEOCOVERAGEENGINE _OCOVERAGERELEASEY7%C#THIS.oCoverageEngine.Forms(2).ClassbCRCCUTHISOCOVERAGEENGINEFORMSACTIVATE7 %]0CUNKEYCODE NSHIFTALTCTRLTHISOCOVERAGEENGINESTANDARDRIGHTCLICK RightClick, DeactivaterDestroyInit  QueryUnloadSActivateKeyPress1A3A34q$A3A!AA3qqAA3AA2Qr 8"p+2)q f%T$ Uk TC %PTaT-T B ULRETURNTHIS CANCELERROR LFORCESEARCHFLAGSLERROR8% T UTHIS LFORCESEARCHINITDIROBJECTSHOWOPEN8% T UTHIS LFORCESEARCHINITDIROBJECTSHOWSAVE8% T UTHIS LFORCESEARCHINITDIROBJECTSHOWHELPk$%CSHOW GTdCUNERRORCMETHODNLINETHIS CANCELERRORFILENAMEInit,SHOWOPENSHOWSAVE?ShowHelpError1q9AB4AA3AA3AA3AAQA2z :"]+y`4)[ BB\%U] TC %B!TCoverage ProfilerB ULRETURNTHISCAPTIONLERROR 7%CTHISFORMSET.cSourceFilebC C FB% Ta!% <UOFORMLOTHERMAINDIALOGS THISFORMSET CSOURCEFILEFORMSCLASSTHISInit,Unload1qAA3qAA"qAAAqA2. )BD ++ T%U3%C tcCaptionbCCTHISFORMbO AB-.%   T T T  T   TTCWWW  TT +C  nTT.. C\T%C T T U TCCAPTION LCDISPLAYTEXT LISTARTCHAR LILABELWIDTHLIMARGIN LVFONTNAME LVFONTSIZETHISLBLNAMEFONTNAMETHISFORMFONTSIZE TEXTWIDTHWIDTHCAPTIONsetfileorclassnamecaption,1q2rAaaA1B2A2%)+E ,,5%UCUTHISFORMOCOVERAGEENGINESHOWSKIPPEDFILES)&T\CTC=2aTC\C)T"#"$#$T%""%$CT&- FB' U( TOENGINEREFLRETURNCTARGETISELECTCHOSTIPOSTHISCAPTIONOCOVERAGEENGINE CSOURCEFILE LBLSTATISTICSLBLVIEWGETALIASHOSTFILECNTLINESCOVEREDSETALLFONTNAMEFONTSIZE LBLCOVEREDCOVERED LBLNOTCOVERED COVERABLELBLTOTAL LBLPERCENTLBLCOVEREDCAPTIONLBLNOTCOVEREDCAPTIONLBLTOTALCAPTIONLBLPERCENTCAPTIONFILETYPECNTCLASSESCOVEREDSETFILEORCLASSNAMECAPTIONOBJHITSOBJTOTALOBJCLASSWIDTHSHPFRAMELEFTLBLNAMEVISIBLELERROR'CUNERRORCMETHODNLINE2 TCTOK BULRETURNTHISCAPTIONInit,Error) cmdOK.Initl1qr1q1!bBA"1q1!""A2"1baABABBB3Q3q!2 > I aAj f) xF%G 1U B UTHISLERRORTa)%CTHISFORMSET.BaseClassbCj$C:{ UNERRORCMETHODNLINETHISLERROR THISFORMSETERRORNAMEInit,ErrorN13AA2.J) xF%G 1U B UTHISLERRORTa)%CTHISFORMSET.BaseClassbCj$C:{ UNERRORCMETHODNLINETHISLERROR THISFORMSETERRORNAMEInit,ErrorN14AA23O) xF%G 1UTa)%CTHISFORMSET.BaseClassbCj$C:{ UNERRORCMETHODNLINETHISLERROR THISFORMSETERRORNAME B UTHISLERRORError,Init1AA42  ) xF%G 1UTa)%CTHISFORMSET.BaseClassbCj$C:{ UNERRORCMETHODNLINETHISLERROR THISFORMSETERRORNAME B UTHISLERRORError,Init1AA32  ) xF%G 1U B UTHISLERRORTa)%CTHISFORMSET.BaseClassbCj$C:{ UNERRORCMETHODNLINETHISLERROR THISFORMSETERRORNAMEInit,ErrorN13AA2.J) nn_L%U B UTHISLERRORrRCProblem:C CEC Coverage Profiler ProblemxTaUNERRORCMETHODNLINETHISLERRORInit,ErrorN13!3.J)n xF%G 1U B UTHISLERRORTa)%CTHISFORMSET.BaseClassbCj$C:{ UNERRORCMETHODNLINETHISLERROR THISFORMSETERRORNAMEInit,ErrorN13AA2.J) xF%G 1UTa)%CTHISFORMSET.BaseClassbCj$C:{ UNERRORCMETHODNLINETHISLERROR THISFORMSETERRORNAME B UTHISLERRORError,Init1AA32  ) xF%G 1U B UTHISLERRORTa)%CTHISFORMSET.BaseClassbCj$C:{ UNERRORCMETHODNLINETHISLERROR THISFORMSETERRORNAMEInit,ErrorN13AA2.J); ""H%*}UTa)%CTHISFORMSET.BaseClassbCj$C:{ UNERRORCMETHODNLINETHISLERROR THISFORMSETERRORNAMEB UTHISLERRORUUUError,InitSHOWOPENSHOWSAVEShowHelp#1AA33443  4S r )"1 -k%U_ %C C  3TKT B UTHISPICTURE TOOLTIPTEXTCAPTIONLERRORTa)%CTHISFORMSET.BaseClassbCj$C:{ UNERRORCMETHODNLINETHISLERROR THISFORMSETERRORNAMEInit,Error11A3AA2 ) xF%G 1UTa)%CTHISFORMSET.BaseClassbCj$C:{ UNERRORCMETHODNLINETHISLERROR THISFORMSETERRORNAME B UTHISLERRORError,Init1AA32  ) }%qUN'%C C  :T B UTHISCAPTIONPICTURE TOOLTIPTEXTLERRORTa)%CTHISFORMSET.BaseClassbCj$C:{ UNERRORCMETHODNLINETHISLERROR THISFORMSETERRORNAMEInit,Error1r1A3AA2 )AutoSize = .T. BackStyle = 1 Caption = "Add-Ins" Height = 15 Left = 16 Top = 10 Width = 38 TabIndex = 3 Name = "lblTitle"  coverage.vcx scov_labelPROCEDURE Init THIS.Caption = "..." ENDPROC PROCEDURE Click THISFORM.GetAddIn() ENDPROC PROCEDURE Error LPARAMETERS nError, cMethod, nLine THIS.lError = .T. THISFORM.Error(nError, THIS.Name+":"+cMethod, nLine) ENDPROC AutoSize = .F. Top = 31 Left = 322 Height = 21 Width = 21 Caption = "..." TabIndex = 5 ZOrderSet = 5 Name = "cmdPicKFile" cov_addindialog. cmdPicKFile commandbutton coverage.vcxscov_commandbuttoniPROCEDURE Valid THISFORM.CheckOKToRun() ENDPROC PROCEDURE ProgrammaticChange THISFORM.CheckOKToRun() ENDPROC PROCEDURE Error LPARAMETERS nError, cMethod, nLine THIS.lError = .T. THISFORM.Error(nError, THIS.Name+":"+cMethod, nLine) ENDPROC PROCEDURE InteractiveChange THISFORM.CheckOKToRun() ENDPROC FontBold = .T. Value = ("") Height = 22 Left = 16 TabIndex = 4 Top = 31 Width = 302 ZOrderSet = 4 Name = "cboFileToRun" cov_addindialog. cboFileToRuncombobox coverage.vcx scov_comboboxPROCEDURE Error LPARAMETERS nError, cMethod, nLine THIS.lError = .T. THISFORM.Error(nError, THIS.Name+":"+cMethod, nLine) ENDPROC Top = 61 Left = 16 Height = 15 Width = 172 AutoSize = .T. BackStyle = 0 Caption = "Register this Add-In after running" TabIndex = 6 ZOrderSet = 3 Name = "chkRegisterAddIns" cov_addindialog.chkRegisterAddInscheckbox coverage.vcx scov_checkboxPROCEDURE Click THISFORM.SetAddIn("") THISFORM.oCoverageEngine = .NULL. THISFORM.Release() ENDPROC PROCEDURE Error LPARAMETERS nError, cMethod, nLine THIS.lError = .T. THISFORM.Error(nError, THIS.Name+":"+cMethod, nLine) ENDPROC AutoSize = .F. Top = 46 Left = 361 Height = 23 Width = 75 Cancel = .T. Caption = "Cancel" TabIndex = 2 ZOrderSet = 2 Name = "cmdCancel" cov_addindialog. cmdCancel commandbutton coverage.vcxscov_commandbuttonfTop = 17 Left = 7 Height = 71 Width = 346 SpecialEffect = 0 ZOrderSet = 0 Name = "SCOV_SHAPE1" cov_addindialog. SCOV_SHAPE1shape coverage.vcx scov_shape/*setaddin Sets engine settings for current addin and whether to register addin based on choices in this dialog. *getaddin Calls engine GetResourceLocation() method to get the name of a file to run as an addin. *checkoktorun Disables run button if no addin filename has been indicated in the textbox.  PROCEDURE setaddin LPARAMETERS tcFile LOCAL cFile cFile = ALLTR(tcFile) WITH THIS.oCoverageEngine .caddin = cFile IF (.lUsingRegistry AND THIS.chkRegisterAddIns.Value) .lRegisterAddIn = .T. ELSE .lRegisterAddIn = .F. ENDIF ENDWITH ENDPROC PROCEDURE getaddin THIS.cboFileToRun.DisplayValue = ; THIS.oCoverageEngine.GetResourceLocation(; "", ; COV_GETADDINFILE_TITLE_LOC, ; COV_ALLFILES_LOC+" (*.*)|*.*", ; THIS.cboFileToRun.DisplayValue, ; "GETFILE") ENDPROC PROCEDURE checkoktorun THIS.cmdOK.Enabled = (NOT EMPTY(THIS.cboFileToRun.DisplayValue)) ENDPROC PROCEDURE Init LPARAMETERS toEngineRef LOCAL lReturn, cAddInFile lReturn = DODEFAULT(toEngineRef) IF lReturn THIS.Caption = COV_DIALOG_CAPTION_LOC +" "+COV_ADDINS_LOC THIS.chkRegisterAddIns.Caption = COV_ADDIN_REGISTER_LOC THIS.cmdOK.Caption = COV_ADDIN_RUN_LOC THIS.cmdCancel.Caption = COV_CANCEL_LOC THIS.lblTitle.Caption = COV_ADDINS_LOC IF NOT THIS.oCoverageEngine.lUsingRegistry THIS.chkRegisterAddIns.Enabled = .F. ELSE FOR EACH cAddInFile IN THIS.oCoverageEngine.aAddIns IF TYPE("cAddInFile") = "C" AND NOT EMPTY(cAddInFile) *&* old code: THIS.cboFileToRun.AddItem(cAddInFile) *&* new code: add escape backslashes throughout the path *&* wherever backslashes appear, but exempt a combination *&* of "\]" at the beginning, which disables any entry. IF LEFT(cAddInFile,2) == "\]" THIS.cboFileToRun.AddItem( ; "\]"+ STRTRAN(SUBSTR(cAddInFile,3),"\","\\")) ELSE THIS.cboFileToRun.AddItem(STRTRAN(cAddInFile,"\","\\")) ENDIF ENDIF ENDFOR THIS.chkRegisterAddIns.Value = THIS.oCoverageEngine.lRegisterAddIn ENDIF STORE THIS.oCoverageEngine.cAddIn TO ; THIS.cboFileToRun.DisplayValue ENDIF ENDPROC PROCEDURE Error LPARAMETERS nError, cMethod, nLine THIS.oCoverageEngine.Error(nError, THIS.Name+":"+cMethod, nLine) ENDPROC PROCEDURE CMDOK.Click THISFORM.SetAddIn(THISFORM.cboFileToRun.DisplayValue) THISFORM.oCoverageEngine = .NULL. THISFORM.Release() ENDPROC PROCEDURE CMDOK.Error LPARAMETERS nError, cMethod, nLine THIS.lError = .T. THISFORM.Error(nError, THIS.Name+":"+cMethod, nLine) ENDPROC EHeight = 95 Width = 443 DoCreate = .T. Caption = "Coverage Add-Ins" HelpContextID = 1895825780 Name = "cov_addindialog" CMDOK.AutoSize = .F. CMDOK.Top = 17 CMDOK.Left = 361 CMDOK.Height = 23 CMDOK.Width = 75 CMDOK.Cancel = .F. CMDOK.Caption = "Run" CMDOK.TabIndex = 1 CMDOK.ZOrderSet = 1 CMDOK.Name = "CMDOK" form coverage.vcx &(( @wwwwwwwwwwwpwwxwwxpwwwxwwwxw~wwxw~wwxwwxpxwpxǀ????( xwwxpxpxx ?BMv(33330 333333330 3333  BMv(3w3w3w3333333330wwww0wwww0wwww0wwww0wwww0wwwwBMv(BMv(BMv(xwwxpxpxxBMv(DDDDDDDDDDBMv(BMv(BMv(wwww 0 0 30 30 3 * COV_CHAR.H * character constants in use by Coverage app #DEFINE C_TAB CHR(9) * tab character #DEFINE C_NULL CHR(0) * null character #DEFINE C_TAB_REPLACEMENT REPL("#",5) * we may need to replace tabs during processing #DEFINE C_INLINECOMMENT CHR(38)+CHR(38) * double ampersand #DEFINE C_COMMENT CHR(42) * asterisk #DEFINE C_DEFINE CHR(35) * hash or pound sign #DEFINE C_CR CHR(13) * carriage return #DEFINE C_DOUBLE_CR CHR(13)+CHR(13) * double carriage return #DEFINE C_CONTINUATION_SYMBOL CHR(59) * semi-colon * COV_DLGS.H * Constants for components in use by Coverage app *&* Messagebox: #DEFINE COV_STOP_MESSAGEBOX 16,COV_DIALOG_CAPTION_LOC+" "+COV_PROBLEM_LOC #DEFINE COV_INFO_MESSAGEBOX 64,COV_DIALOG_CAPTION_LOC+" "+COV_INFO_LOC #DEFINE COV_YESNOCANCEL_MESSAGEBOX 32+3,COV_DIALOG_CAPTION_LOC #DEFINE COV_WARNING_YESNO_MESSAGEBOX 48+4,COV_DIALOG_CAPTION_LOC #DEFINE IDYES 6 #DEFINE IDNO 7 #DEFINE IDCANCEL 2 *&* common dialog classes in use: #DEFINE COV_COMMON_FILE_DIALOG_CLASS "scov_CommonFileDialog" #DEFINE COV_COMMON_DIALOG_CLASS "scov_CommonDialog" #DEFINE cdlScaleModePixels 3 *&* common dialog flag constants and results for getfont: #DEFINE cdlCFScreenFonts 0x1 * Screen fonts supported by the system only #DEFINE cdlCFANSIOnly 0x400 * Specifies that the dialog box allows only a selection of the fonts that use the Windows character set. * If this flag is set, the user won't be able to select a font that contains only symbols. #DEFINE cdlCFForceFontExist 0x10000 * Specifies that an error message box is displayed if the user attempts to select a font or style that doesn't exist. #DEFINE cdlCFNoStyleSel 0x100000 * No style #DEFINE cdlCFFixedPitchOnly 0x4000 * Specifies that the dialog box selects only fixed-pitch fonts *&* common dialog constants for getfile/putfile: #DEFINE cdlOFNPathMustExist 0x800 * User can enter only valid path names. #DEFINE cdlOFNNoChangeDir 0x8 * Sets the current directory to what it was when the dialog box was invoked. #DEFINE cdlOFNHideReadOnly 0x4 * Hide readonly checkbox #DEFINE cdlOFNExplorer 0x80000 * Use Explorer dialog template *&* addtl common dialog constant for getfile/reads: #DEFINE cdlOFNFileMustExist 0x1000 * User can enter only names of existing files. *&* addtl common dialog constants for putfile/writes: #DEFINE cdlOFNOverwritePrompt 0x2 * User must confirm whether to overwrite the file. #DEFINE cdlOFNNoReadOnlyReturn 0x8000 * File can't be Read Only and can't be in a write-protected dir. * COV_LOCS.H * String constants in use by Coverage app * NB: some of these #DEFINEs are dependent on COV_CHAR.H * definitions, so this file is #INCLUDEd after COV_CHAR.H * in COVERAGE.H #DEFINE COV_LOC "English-US" #IF UPPER(COV_LOC) = "ENGLISH-US" #DEFINE COV_APPLICATION_NAME_LOC "Coverage Profiler" #DEFINE COV_DIALOG_CAPTION_LOC COV_APPLICATION_NAME_LOC *&* error messages and other feedback: #DEFINE COV_PROBLEM_LOC "Problem" #DEFINE COV_INFO_LOC "Information" #DEFINE COV_DEBUG_ERROR_LOC "Error #" #DEFINE COV_DEBUG_LINENO_LOC "Line #" #DEFINE COV_LOG_NOT_SPECIFIED_LOC "No log file specified." #DEFINE COV_LOCATE_CLASSLIB_LOC "Where is "+COV_APPLICATION_NAME_LOC+"'s VCX?" #DEFINE COV_FILE_DOES_NOT_EXIST_LOC "File specified does not exist." #DEFINE COV_OKAY_TO_OVERWRITE_LOC "File specified already exists. "+C_CR+"Okay to overwrite?" #DEFINE COV_ADDIN_DOES_NOT_EXIST_LOC "Add-In file specified does not exist." #DEFINE COV_ADDIN_NOT_SUPPORTED_TYPE_LOC "Add-In file specified is not a supported type." #DEFINE COV_LOG_CANNOT_BE_OPENED_LOC "Log file unavailable." #DEFINE COV_SOURCE_CANNOT_BE_OPENED_LOC "Source file unavailable." #DEFINE COV_START_LOGGING_LOC "The log file you chose does not exist yet."+C_DOUBLE_CR + ; "Test your application with COVERAGE SET TO "+C_CR + ; ", then run "+COV_APPLICATION_NAME_LOC+C_CR+; "against that log."+C_DOUBLE_CR+; COV_APPLICATION_NAME_LOC+" can SET COVERAGE TO your filename "+ C_CR+; "now and you can test your application. When you re-run "+ C_CR+; COV_APPLICATION_NAME_LOC+", it will analyze the current "+ C_CR+; "contents of SET('COVERAGE') by default."+C_DOUBLE_CR+; "Would you like to: "+C_DOUBLE_CR+; "SET COVERAGE TO your log file now? (yes)"+C_DOUBLE_CR+; "Pick a filename from existing coverage logs? (no)"+C_DOUBLE_CR+; "Come back later? (cancel)" #DEFINE COV_NO_COVERABLE_CODE_LOC "A source code entry has no coverable code"+C_CR+; "or is a member of a container object."+C_DOUBLE_CR+; "This record will be deleted." #DEFINE COV_PROJECT_UNAVAILABLE_LOC "Project file currently unavailable." #DEFINE COV_CANNOT_RESUME_LOC "Former coverage file is unavailable;"+C_CR+"COVERAGE will be off." #DEFINE COV_LOG_WRONG_FORMAT_LOC "File specified is not correct Coverage Log format for this version of VFP." #DEFINE COV_LOG_HAS_NO_USABLE_RECORDS_LOC "Log file has no usable records." #DEFINE COV_NO_USABLE_PROJECT_RECORDS_LOC "Project has no source-code-type records." #DEFINE COV_NO_LOG_ENTRIES_SKIPPED_LOC "No log entries were skipped." #DEFINE COV_SWITCHING_OFF_COMMON_DIALOG_LOC "Common Dialog OCX not found; "+ C_CR + ; "switching to native VFP code version." #DEFINE COV_FEATURE_NEEDS_OCX_LOC "This feature is currently unavailable, "+C_CR+ ; "because it requires an ActiveX control "+C_CR+ ; "not found on your system." #DEFINE COV_ALREADY_ACTIVE_LOC COV_APPLICATION_NAME_LOC+" already active!" #DEFINE COV_REOPEN_SAME_LOG_FILE_LOC "You haven't changed the specified Coverage filename."+ ; C_DOUBLE_CR+; "Do you want to re-examine this Coverage file?" #DEFINE COV_MARKS_CHANGED_LOC "You have changed Coverage marks, but some records "+C_CR+; "in the current log are already marked. "+ ; C_DOUBLE_CR+ ; "Would you like to: "+ ; C_DOUBLE_CR+ ; "Preserve current marked records (yes) or "+ ; C_DOUBLE_CR+ ; "Empty and re-mark these records (no)?" #DEFINE COV_MARK_ALL_NOW_LOC "You have chosen to mark all records on load, but "+C_CR+; "some records in the current log may not be marked yet. "+ ; C_DOUBLE_CR+ ; "Would you like to mark all records now?" #DEFINE COV_RESUME_LOC "Running Coverage Profiler temporarily suspended" + C_CR + ; "coverage logging to " + THIS.cSuspendedLog + "." + ; C_DOUBLE_CR + ; "How would you like to resume coverage logging to this file?" + ; C_DOUBLE_CR + ; "Click:"+ C_TAB + "To have this effect:" + ; C_DOUBLE_CR + ; "Yes"+ SPACE(2) + C_TAB + "-- Append records to the log file" + C_CR + ; "No"+ SPACE(3) + C_TAB + "-- Overwrite the log file" + C_CR + ; "Cancel"+ C_TAB + "-- Leave coverage set off" #DEFINE COV_BAD_PARAMS_LOC "You have passed one or more parameters incorrectly." + ; C_DOUBLE_CR+ ; "This application takes the following "+ C_CR + ; "parameters, all optional:"+ ; C_DOUBLE_CR + ; "(1), type 'C' the name of a coverage log to mark;"+ ; C_DOUBLE_CR + ; "(2), type 'L' a switch to process the log unattended;" + ; C_DOUBLE_CR + ; "(3), type 'C' the name of an Add-In program to run." #DEFINE COV_BADDIALOGS_LOC "Cov_Standard's .cMainDialogClass and/or .cZoomDialogClass"+C_CR+; "have been incorrectly assigned."+C_DOUBLE_CR+; "This Coverage User Interface class must contain dialogs"+C_CR+; "descended from "+ ; "cov_MainDialog_Standard and cov_ZoomDialog." *&*GETFILE/PUTFILE dialog titles, filters, etc: #DEFINE COV_GETMAINFILE_TITLE_LOC "Please confirm main program for" #DEFINE COV_GETSOURCEFILE_TITLE_LOC "Please locate" #DEFINE COV_SETTARGETDBF_TITLE_LOC "Please specify location to save Coverage results for" #DEFINE COV_SETSTACKXML_TITLE_LOC "Please specify location to save Coverage StackLevel XML for" #DEFINE COV_SETTRANSFORMEDXML_TITLE_LOC "Please specify location to save transformed file for" #DEFINE COV_GETXSLTFILE_TITLE_LOC "Please specify an XSL Transformation file" #DEFINE COV_SAVEDTARGET_AS_LOC "Your coverage analysis is saved as" #DEFINE COV_SAVEDSTACKXML_AS_LOC "Your coverage stack analysis is saved as" #DEFINE COV_SAVEDSKIPFILES_AS_LOC "Some source files could not be located;"+C_CR+; "their names are saved in a second table" #DEFINE COV_GETLOGFILE_TITLE_LOC "Please specify coverage log file" #DEFINE COV_GETPROJECTFILE_TITLE_LOC "Please specify a project file to check" #DEFINE COV_GETADDINFILE_TITLE_LOC "Please specify an Add-In to run" #DEFINE COV_GETFILE_BUTTON_LOC "Select" #DEFINE COV_LOGFILES_LOC "Coverage Logs" #DEFINE COV_ALLFILES_LOC "All Files" #DEFINE COV_XMLFILES_LOC "XML Files" #DEFINE COV_XSLFILES_LOC "XSL Transforms" #DEFINE COV_HTMFILES_LOC "HTML Files" #DEFINE COV_PROJECTSONLY_LOC "Projects Only" #DEFINE COV_PROGRAMSONLY_LOC "Programs Only" #DEFINE COV_DBFSONLY_LOC "Table/DBF" #DEFINE COV_SOURCEFILES_LOC "Source Files" *&* wait window nowait /status bar messages during processing #DEFINE COV_FILLING_ALL_RECORDS_LOC "Checking Coverage of all target source files..." #DEFINE COV_MARKING_ALL_RECORDS_LOC "Marking all source code..." #DEFINE COV_EMPTYING_ALL_RECORDS_LOC "Changing Coverage modes and emptying marked code..." #DEFINE COV_CREATING_FILES_FROM_LOC "Creating work files from" #DEFINE COV_CHECKING_SOURCE_AVAIL_FROM_LOC "Checking for source code for" #DEFINE COV_MARKING_SOURCE_FOR_LOC "Marking source code for" #DEFINE COV_GETTING_SOURCECODE_FROM_LOC "Getting source code from" #DEFINE COV_CHECKING_FOR_VALID_LOG_LOC "Validating source file..." #DEFINE COV_INDEXING_SOURCE_RECORDS_LOC "Indexing source records..." #DEFINE COV_CREATING_TARGET_ITEMS_LOC "Creating target items..." #DEFINE COV_LOADING_STACKINFO_LOC "Loading log for StackLevel analysis" #DEFINE COV_GENERATING_STACKXML_LOC "Generating StackLevel XML for" #DEFINE COV_WRITING_STACKXML_LOC "Writing StackLevel XML to disk" #DEFINE COV_WRITING_TRANSFORM_LOC "Writing transformed file to disk" *&* main dialog buttons (tooltips and default captions if no pictures) #DEFINE COV_OPEN_LOC "Open" #DEFINE COV_SAVE_LOC "Save" #DEFINE COV_COVERAGE_MODE_LOC "Coverage Mode" #DEFINE COV_PROFILE_MODE_LOC "Profile Mode" #DEFINE COV_PREVIEW_MODE_LOC "Preview Mode" #DEFINE COV_ZOOM_MODE_LOC "Zoom Mode" #DEFINE COV_STATISTICS_LOC "Statistics" #DEFINE COV_OPTIONS_LOC "Options" #DEFINE COV_ADDINS_LOC "Add-Ins" #DEFINE COV_HELP_LOC "Help" #DEFINE COV_OKCLOSE_LOC "OK" #DEFINE COV_CANCEL_LOC "Cancel" #DEFINE COV_FIND_LOC "Find" *&* Main and Zoom dialog strings #DEFINE COV_FULL_SOURCE_FILE_LOC "All Classes, Objects, Procs" #DEFINE COV_ZOOM_MARKED_CODE_FOR_LOC "Marked Code For" #DEFINE COV_ZOOM_GET_CODE_LOC "Fast Mode: DoubleClick/Enter on List for Code" #DEFINE COV_PROFILE_MARK_1ST_LOC "1st" #DEFINE COV_PROFILE_MARK_AVG_LOC "Avg" #DEFINE COV_PROFILE_ONE_HIT_LOC "Hit" #DEFINE COV_PROFILE_HITS_LOC "Hits" *&* Statistics dialog and reporting #DEFINE COV_STATS_VIEW_DETAILS_LOC "View details" #DEFINE COV_STATS_VIEW_FILES_SKIPPED_LOC "\ 0 #DEFINE COV_STATS_PJXOBJS_HIT_LOC "Total Classes Hit in Project VCXs and SCXs" #DEFINE COV_STATS_PJXOBJS_COVERABLE_LOC "Total Classes in Project VCXs and SCXs contain code" #ELSE #DEFINE COV_STATS_PJXOBJS_HIT_LOC "Total Classes Hit in Project VCXs, SCXs, FRXs, and LBXs" #DEFINE COV_STATS_PJXOBJS_COVERABLE_LOC "Total Classes in Project VCXs, SCXs, FRXs, and LBXs contain code" #ENDIF #DEFINE COV_STATS_PCT_PJXFILES_LOC "% Project Coverage by Files" #DEFINE COV_STATS_PCT_PJXLINES_LOC "% Project Coverage by Lines (Files Hit Only)" #DEFINE COV_STATS_PCT_PJXOBJS_LOC "% Class Code Coverage for Project Files Hit" #DEFINE COV_STATS_FILE_NOT_HIT_LOC "File skipped or not logged" *&* Options dialog #DEFINE COV_OPT_SMARTPATH_LOC "Use \ 0, ; THIS.cMarkExecuted, ; THIS.cMarkNotExecuted)) ) + ; SPACE(4) + ; cRealLine #ELSE #DEFINE COV_MARK_CODE_LINE THIS.MarkCodeLine(cRealLine,iExecuted, nFirst, nAverage) #ENDIF * The following item is used for SET MEMOWIDTH in the Coverage * private data session. * The Coverage engine uses MLINE(), MEMLINES(), and _MLINE to parse * lines of source code. * Note: this figure is the command line limit, and SET MEMOWIDTH * limit, in VFP 6. In VFP 5, SETting MEMOWIDTH TO this value still * results in a setting of 1024 (the VFP 5 command and SET MEMOWIDTH * limit). * You can change this setting manually in the Coverage data session * any time you like.... unless you write *lines without * continuation/concatenation* that are extremely long, * you do not need this high a limit -- and you may find that * leaving it at this setting uses slightly more memory than necessary. * (Remember that we're not talking about macro-expanded SELECT statements, * here, but rather the length of the actual code lines you *type*.) * When figuring your longest lines of code, take a look at the length * of your object and procedure names * This figure is set at the outside limit for safety's sake. #DEFINE COV_MEMOWIDTH 8192 * The following items define the length of * character fields in the source and target cursors. * Their default values (115 each) are defined by * max length concatenated key, * since two of these may be used together. * * To conserve disk space, especially in the source * cursor and its CDX, you may reduce the size * of these fields if you wish. However, * use care, or errors will occur * when filenames or object/container * information is truncated, as described below. * As in the COV_MARK_CODE_LINE item above, * these items are defined in two ways, depending * on the setting of COV_TOPSPEED. Setting * COV_TOPSPEED .T. will give you the fastest possible * execution, since these #DEFINEs will resolve to a * literal. By contrast, when COV_TOPSPEED is .F., * (the default value of this #DEFINE), * these #DEFINEs resolve to coverage engine properties, * which means they take a little longer to execute but * can be tweaked dynamically, for example when you know * you are about to open a very large log. * Whether you change these values in the #DEFINEs or * in the property values, be mindful of the following * conditions: * If you choose to increase any of these values, * don't make the sum of any two of them over 240, * to avoid potential max key length problems. * If you choose to decrease any of these values, to * conserve diskspace, avoid decreasing Hostfile unless * you are sure the lengths of your fully-qualified * source files will not be exceeded. Otherwise, * you may receive errors when the Profiler tries * to find the uncompiled versions of these files. * Whether you decrease ObjClass, Executing, or both, * be sensible. If you know you nest pageframes and * grids several container-layers deep, or that * you tend to use very long class names, try to * stay above the maximum string these fields * are likely to contain, plus a margin for error. * You may want to examine the source and target files * first, to see how the engine uses these fields. * Be on the lookout for suddenly-incorrect * Coverage and Profiling statistics, * even though you may receive no obvious errors when * when the Profiler analyzes the log. * Statistical errors will occur if object and method names * are being truncated in the fields. #IF COV_TOPSPEED #DEFINE COV_LEN_HOSTFILE 115 #DEFINE COV_LEN_OBJCLASS 115 #DEFINE COV_LEN_EXECUTING 115 #ELSE #DEFINE COV_LEN_HOSTFILE THISFORMSET.iLenHostFile #DEFINE COV_LEN_OBJCLASS THISFORMSET.iLenObjClass #DEFINE COV_LEN_EXECUTING THISFORMSET.iLenExecuting #ENDIF * The Duration field in the source cursor is tuned with a constant * and engine property similar to the character fields above. * However, this numeric field's length is also * affected by the N_COVLOG_PRECISION specification. Like all other * constants set by the internal log and its version changes, * you will find N_COVLOG_PRECISION in COV_SPEC.H. You should * not change N_COVLOG_PRECISION, but you can change the total length * of the Duration field using COV_LEN_DURATION, after some experience, * if you find you don't need this many places in the field. #IF COV_TOPSPEED #DEFINE COV_LEN_DURATION 11 #ELSE #DEFINE COV_LEN_DURATION THISFORMSET.iLenDuration #ENDIF #DEFINE COV_LINES_TO_VALIDATE 100 #DEFINE COV_POINT_SETTING "." * The following item is the report form in use * by the cov_standard.DisplayProjectStatistics() * method. * Note that this method is abstract in the cov_engine class. * It is called by cov_engine.ShowProjectStatistics() after * cov_engine.GetProjectStatistics(), which serves to * create a cursor containing the appropriate information. * You can use a different FRX, and recompile COVERAGE.APP, * to change cov_standard's display of this cursor, * or you can subclass cov_engine with a different * .DisplayProjectStatistics() method that doesn't * use a REPORT FORM mechanism at all. * Refer to cov_engine.GetProjectStatistics() to * the makeup of the project statistics cursor. #DEFINE COV_PROJECT_FRX "COV_PJX.FRX" * debugging: #DEFINE COV_DEBUG .F. #DEFINE COV_TIMEOUT_SECS 2 #IF COV_DEBUG #DEFINE COV_DEBUG_MESSAGE WAIT WINDOW LEFT(MESSAGE()+C_CR+; SYS(2018)+C_CR+; cMethod+C_CR+; MESSAGE(1),COV_MESSAGE_LIMIT) ; TIMEOUT COV_TIMEOUT_SECS #DEFINE COV_DEBUG_ACTION ERROR nError #DEFINE COV_ENGINE_ERROR_DEFAULT NOTE #ELSE #DEFINE COV_DEBUG_MESSAGE MESSAGEBOX(COV_PROBLEM_LOC+":"+C_CR+; MESSAGE()+C_CR+; cMethod,COV_STOP_MESSAGEBOX) #DEFINE COV_DEBUG_ACTION NOTE #DEFINE COV_ENGINE_ERROR_DEFAULT THIS.Release() #ENDIF *&* comment out the line *&* below if you don't want the *&* on key label set up to *&* invoke the Find dialog in the Coverage context... *&* Or, if this keystroke conflicts with some other *&* utility you use, change the label to suit *&* your environment... #DEFINE COV_OKL_SHOW_FIND_DIALOG CTRL-F5 *&* the following five items are used by Coverage generation *&* of StackLevel information to an XML version of the log: * the first two represent element node prefixes #DEFINE COV_STACKROOT "VFPCallStackLog" #DEFINE COV_STACK_ONEVENT_TAG "event" * the next items are used to help identify the XML and HTM files written to * disk as being generated from this particular process. #DEFINE COV_STACKXML_SUFFIX "_STACK" #DEFINE COV_STACKXMLEXT_SUFFIX "_STACKX" #DEFINE COV_TRANSFORM_SUFFIX "_XSL" * the next item indicates whether lines are loaded from the Coverage * source workfile dbf or gathered directly by reading the original * text log. The former has a very slight speed advantage but will * not include ON... events, since those lines are ignored by the * Coverage source and target workfiles (there is no code to mark or profile * for these lines). #DEFINE COV_LOAD_STACK_FROM_DBF .F. * the vars in the next item have the same meaning as the columns of the * same name in the Coverage source workfile DBF -- equivalents for these * items are read in from the source text log when COV_LOAD_STACK_FROM_DBF is .F., * and this expression stays the same. You can change it as long as you ensure that * the result will never be empty except for ON... events. * Load a log into COVERAGE.APP, SET DATASESSION TO _oCoverage.DataSessionID, * and refer to the source workfile (by default, its alias is FromLog) for * some indication on the possible contents of these columns. #DEFINE COV_STACKEXPR ALLTR(IIF(INLIST(FileType,".fxp",".mpx",".qpx",".spx"), ; IIF(EMPTY(ObjClass), ; IIF(NOT EMPTY(Executing),ALLTR(Executing),""),; IIF(LEFT(Executing,1)="." OR AT(".",Executing) = 0,ALLTR(ObjClass)+; IIF(AT(".",Executing) = 0,".",""),"")+ALLTR(Executing)), ; ALLTR(Executing))) * COVERAGE.H *&* Coverage character constants for log and parsing: #INCLUDE COV_CHAR.H *&* Coverage localized strings (may use some constants above): #INCLUDE COV_LOCS.H *&* Coverage common dialog component constants: #INCLUDE COV_DLGS.H *&* Coverage specs & requirements: #INCLUDE COV_SPEC.H *&* Coverage registry object constants: #INCLUDE COV_REGS.H *&* Coverage tune-able options: #INCLUDE COV_TUNE.H 0G PLATFORMCUNIQUEIDC TIMESTAMPN OBJTYPENOBJCODENNAMEM"EXPRM&VPOSN* HPOSN3 HEIGHTN< WIDTHNE STYLEMNPICTUREMRORDERMVUNIQUELZCOMMENTM[ENVIRONL_BOXCHARC`FILLCHARCaTAGMbTAG2MfPENREDNjPENGREENNoPENBLUENtFILLREDNyFILLGREENN~FILLBLUENPENSIZENPENPATNFILLPATNFONTFACEMFONTSTYLENFONTSIZENMODENRULERNRULERLINESNGRIDLGRIDVNGRIDHNFLOATLSTRETCHLSTRETCHTOPLTOPLBOTTOMLSUPTYPENSUPRESTNNOREPEATLRESETRPTNPAGEBREAKLCOLBREAKLRESETPAGELGENERALNSPACINGNDOUBLELSWAPHEADERLSWAPFOOTERLEJECTBEFORLEJECTAFTERLPLAINLSUMMARYLADDALIASLOFFSETNTOPMARGINNBOTMARGINNTOTALTYPENRESETTOTALNRESOIDNCURPOSLSUPALWAYSLSUPOVFLOWLSUPRPCOLNSUPGROUPNSUPVALCHNGLSUPEXPRMUSERM WINDOWS _RKG1EC3CA 581548962 1 53 1.000 0.000 0.000 -1.000 F   0 10 20T1212 FF T F WINDOWS _RKO12T389 9 0 6459.000 0.000 F FFF F WINDOWS _RKG1EC3CC 9 1 0.000 0.000 F FFF F WINDOWS _RKG1EC3CD 9 4 14167.000 0.000 F FFF F WINDOWS _RKG1EC3CE 9 7 0.000 0.000 F FFF T WINDOWS _RKG1ENPY8 9 8 19792.000 1.012E+9 T FTT T WINDOWS _RKH0Z67E8 581600017 8 0 11145.833 1875.000 1875.00058854.167 ! C 0 0 0 -1 -1 -1 " 4 10 1 T F 2 0 0 1 TF0 0F# WINDOWS _RKH0Z67E9 687691255 8 0$11041.667 1875.000 1979.16775416.667 % C 0 0 0 -1 -1 -1 & 2 10 1 T T F 2 0 0 1 TF0 0F' WINDOWS _RKH0Z67EA 687691251 8 0)13125.000 1770.833 1875.00011666.667 * N 0 0 0 -1 -1 -1 + 0 10 1 T T 0 1 0 6 TF0 0F, WINDOWS _RKH0Z67EB 581600017 8 0-15000.000 1770.833 1875.00011666.667 . N 0 0 0 -1 -1 -1 / 0 10 1 T T 0 1 0 6 TF0 0F0 WINDOWS _RKH0Z67EC 687691249 8 0113125.00014270.833 1875.00062916.667 2 C 0 0 0 -1 -1 -1 3 0 10 1 T T 0 0 0 1 TF0 0F4 WINDOWS _RKH0Z67ED 687691129 8 0515000.00014270.833 1875.00062916.667 6 C 0 0 0 -1 -1 -1 7 0 10 1 T T 0 0 0 1 TF0 0F8 WINDOWS _RKH0Z67EE 687691141 8 0920625.00014270.833 1875.00062916.667 : C 0 0 0 -1 -1 -1 ; 0 10 1 T T 0 0 0 1 TF0 0F< WINDOWS _RKH0Z67EF 608795707 8 0>20625.000 1770.833 1875.00011666.667 @ N 0 0 0 -1 -1 -1 A 0 10 1 T T 0 1 0 6 TF0 0FB WINDOWS _RKH11NL6Q 687691247 8 0C22500.00014270.833 1875.00062916.667 D C 0 0 0 -1 -1 -1 E 0 10 1 T T 0 0 0 1 FF0 0TF WINDOWS _RKH11NL6R 687691244 8 0J22500.000 1770.833 1875.00011666.667 L N 0 0 0 -1 -1 -1 M 0 10 1 T T 0 1 0 6 FF0 0TN WINDOWS _RKH11PRUV 608922386 8 0Q16875.000 1770.833 1875.00011666.667 R N 0 0 0 -1 -1 -1 S 0 10 1 T T 0 1 0 6 FF0 0TT WINDOWS _RKH11PRUW 608922397 8 0W18750.000 1770.833 1875.00011666.667 X N 0 0 0 -1 -1 -1 Y 0 10 1 T T 0 1 0 6 FF0 0TZ WINDOWS _RKH11PRUX 687691132 8 0]16875.00014270.833 1875.00062916.667 ^ C 0 0 0 -1 -1 -1 _ 0 10 1 T T 0 0 0 1 FF0 0T` WINDOWS _RKH11PRUY 687691137 8 0c18750.00014270.833 1875.00062916.667 d C 0 0 0 -1 -1 -1 e 0 10 1 T T 0 0 0 1 FF0 0Tf WINDOWS _RKL10IGGC 581863491 6 29062.500 1250.000 104.16776250.000 -1 -1 -1 -1 -1 -1 1 8 0 T F 1 TF3 0F WINDOWS _RKL10IJ44 581863493 6 29375.000 1250.000 104.16776250.000 -1 -1 -1 -1 -1 -1 1 8 0 T F 1 TF3 0F WINDOWS _RKO12QV53 582062226 6 10729.167 1250.000 104.16776250.000 -1 -1 -1 -1 -1 -1 1 8 0 T F 1 TF3 0F WINDOWS _RKO12U3BN 582390213 8 0i 0.000 1250.000 5000.00065104.167 k C 0 0 0 -1 -1 -1 l 1 16 1 T T F 2 0 0 1 TF3 0F WINDOWS _RS60XE4GS 687691240 8 0m29791.667 1458.333 1875.00011666.667 n N 0 0 0 -1 -1 -1 o 0 10 1 T F 0 1 0 1 TF0 0F WINDOWS _RS60XE4GT 687691214 8 0p29791.66713854.167 1875.00062916.667 q C 0 0 0 -1 -1 -1 r 0 10 1 T F 0 0 0 1 TF0 0F WINDOWS _RS60XE4GU 687691238 8 0s31666.667 1458.333 1875.00011666.667 t N 0 0 0 -1 -1 -1 u 0 10 1 T F 0 1 0 1 TF0 0F WINDOWS _RS60XE4GV 687691213 8 0v31666.66713854.167 1875.00062916.667 w C 0 0 0 -1 -1 -1 x 0 10 1 T F 0 0 0 1 TF0 0F WINDOWS _RS60XE4GW 687691237 8 0y33750.000 1458.333 1875.00011666.667 z N 0 0 0 -1 -1 -1 { 0 10 1 T F 0 1 2 1 TF0 0F WINDOWS _RS60XE4GX 687691211 8 0|33750.00013854.167 1875.00062916.667 } C 0 0 0 -1 -1 -1 ~ 0 10 1 T F 0 0 0 1 TF0 0F WINDOWS _RS60XE4GY 687691235 8 035625.000 1458.333 1875.00011666.667 N 0 0 0 -1 -1 -1 0 10 1 T F 0 1 2 1 TF0 0F WINDOWS _RS60XE4GZ 687691210 8 035625.00013854.167 1875.00062916.667 C 0 0 0 -1 -1 -1 0 10 1 T F 0 0 0 1 TF0 0F WINDOWS _RS60XE4H0 687691203 8 041875.00013854.167 1875.00062916.667 C 0 0 0 -1 -1 -1 0 10 1 T F 0 0 0 1 TF0 0F WINDOWS _RS60XE4H2 687691201 8 044062.50013854.167 1875.00062916.667 C 0 0 0 -1 -1 -1 0 10 1 T F 0 0 0 1 TF0 0F WINDOWS _RS60XE4H4 687691197 8 046250.00013854.167 1875.00062916.667 C 0 0 0 -1 -1 -1 0 10 1 T F 0 0 0 1 TF0 0F WINDOWS _RS60XE4H6 687691233 8 037812.500 1458.333 1875.00011666.667 N 0 0 0 -1 -1 -1 0 10 1 T F 0 1 2 1 TF0 0F WINDOWS _RS60XE4H7 687691207 8 037812.50013854.167 1875.00062916.667 C 0 0 0 -1 -1 -1 0 10 1 T F 0 0 0 1 TF0 0F WINDOWS _RS60XE4H8 687691232 8 039687.500 1458.333 1875.00011666.667 N 0 0 0 -1 -1 -1 0 10 1 T F 0 1 2 1 TF0 0F WINDOWS _RS60XE4H9 687691205 8 039687.50013854.167 1875.00062916.667 C 0 0 0 -1 -1 -1 0 10 1 T F 0 0 0 1 TF0 0F WINDOWS _RS60XEKLZ 687691225 8 041770.833 1458.333 1875.00011666.667 C 0 0 0 -1 -1 -1 0 10 1 T F 0 0 0 1 TF0 0F WINDOWS _RS60XEKM0 687691219 8 043958.333 1354.167 1875.00011770.833 C 0 0 0 -1 -1 -1 0 10 1 T F 0 0 0 1 TF0 0F WINDOWS _RS60XEKM1 687691217 8 046145.833 1458.333 1875.00011666.667 C 0 0 0 -1 -1 -1 0 10 1 T F 0 0 0 1 TF0 0F WINDOWS _RKG1F4584 58239294418 T 2 1 WINDOWS _RKG1F4586 58239294418 T 2 1 WINDOWS _RKG1F4588 58239294518 T 2 1 WINDOWS _RKG1F458A 58239294618 T 2 1 WINDOWS _RKH146OXG 58239294718 T 2 1 WINDOWS _RKH146OXI 58239294818 T 2 1 WINDOWS _RKO11TH6L 58239294918 T 0 1 WINDOWS _RKO11TH6N 58239295318 T 0 1 WINDOWS _RKO11TH6P 58239295418 T 0 1 WINDOWS _RKO11TH6R 58239295518 T 0 1 WINDOWS _RKO11TH6T 58239295518 T 0 1 WINDOWS _RKO11TH6V 58239295618 T 0 1 WINDOWS _RKO11TH6X 58239295618 T 0 1 WINDOWS _RKO11TH6Z 58239295718 T 0 1 WINDOWS _RKO11TH71 58239295718 T 0 1 WINDOWS _RKO11TH73 58239296018 T 0 1 WINDOWS _RKO11TH75 58239296018 T 0 1 WINDOWS _RKO11TH77 58239296118 T 0 1 WINDOWS _RKO11TH79 58239296218 T 0 1 WINDOWS _RKO11TH7B 58239296218 T 0 1 WINDOWS _RKO11TH7D 58239296318 T 0 1 WINDOWS _RKO11TH7F 58239296318 T 0 1 WINDOWS _RKO1212MR 58239296418 T 0 1 WINDOWS _RKO12YHMQ 68769092218 T 0 1 WINDOWS 23 16.000 8.000 12.000 9.000 4 0 0 10 WINDOWS 23 16.000 8.000 12.000 9.000 4 0 4 10 WINDOWS 23 17.000 8.000 13.000 11.000 4 0 2 10 WINDOWS 23 23.000 13.000 17.000 16.000 6 0 1 16 WINDOWS 25  F  C H! Courier New;"winspoolHP LaserJet 3100HPLJ3100HP LaserJet 3100' oXXLetter''''DRIVER=winspool DEVICE=HP LaserJet 3100 OUTPUT=HPLJ3100 ORIENTATION=0 PAPERSIZE=1 PAPERLENGTH=2794 PAPERWIDTH=2159 COPIES=1 DEFAULTSOURCE=7 PRINTQUALITY=600 YRESOLUTION=600 Hostfile  Courier New Covered # 0rcNoHits+": "+Hostfile  Courier New5Covered = 0 AND NOT (EMPTY(FileType) AND RECNO() = 1)Covered  Courier New Covered # 0 Coverable  Courier New Covered # 0rcHLines  Courier New Covered # 0rcTLines  Courier New Covered # 0rcPLines  Courier NewCovered # 0 AND Coverable# 07IIF(Coverable = 0,"",STR((Covered/Coverable)*100,10,2))  Courier New Covered # 0rcPObjs  Courier Newg(NOT rlOmitObjects) AND Covered # 0 AND INLIST(FileType,".vct",".sct", ".frt", ".lbt") AND ObjTotal # 05IIF(ObjTotal = 0,"",STR((ObjHits/ObjTotal)*100,10,2))  Courier NewT(NOT rlOmitObjects) AND Covered # 0 AND INLIST(FileType,".vct",".sct",".frt",".lbt")ObjHits  Courier NewU(NOT rlOmitObjects) AND Covered # 0 AND INLIST(FileType,".vct",".sct",".frt",".lbt")ObjTotal  Courier NewT(NOT rlOmitObjects) AND Covered # 0 AND INLIST(FileType,".vct",".sct",".frt",".lbt")rcHObjs  Courier NewV(NOT rlOmitObjects) AND Covered # 0 AND INLIST(FileType,".vct",".sct", ".frt", ".lbt")rcTObjs  Courier NewU(NOT rlOmitObjects) AND Covered # 0 AND INLIST(FileType,".vct",".sct", ".frt",".lbt")3rcTitle + IIF(EMPTY(FileType),CHR(13)+ Hostfile,"")  Courier New riFileCount  Courier New rcTPFiles  Courier New riFileHits  Courier New rcHPFiles  Courier New Coverable  Courier New rcTPLines  Courier NewCovered  Courier New rcHPLines  Courier New rcPPFiles  Courier NewriFileCount > 0 rcPPLines  Courier NewriCoverable > 0rcPPObjs  Courier New'(NOT rlOmitObjects) AND riObjTotal > 0ObjTotal  Courier New(NOT rlOmitObjects)rcTPObjs  Courier New(NOT rlOmitObjects)ObjHits  Courier New(NOT rlOmitObjects) rcHPObjs  Courier New(NOT rlOmitObjects) =IIF(riFileCount = 0,"",ROUND((riFileHits/riFileCount)*100,2))  Courier New>IIF(riCoverable = 0, "", ROUND((riCovered/riCoverable)*100,2))  Courier New(@BM~>(@uBM~>(@BM~>(@BM~>(@ ?BM~>(@BM~>(@BM~>(@c1BM~>(@?BMv(BMz>(BMCHKBBMCLNUBMCLRA.BCGRP.PMBcoverage.prgc:\docume~1\vfpbuild\locals~1\temp\coverage.fxp.\coverage.vcxcoverage.vctcoverage.icoopen.bmpsave.bmpcoverage.bmpprofile.bmppreview.bmpzoom.bmpstats.bmpoptions.bmpaddins.bmpcov_char.hcov_dlgs.hcov_locs.hcov_regs.hcov_spec.hcov_tune.hcoverage.hcov_pjx.frxcov_pjx.frtho_split.curcovshort.mprcovshort.mpxcoverage.mskopen.msksave.mskprofile.mskpreview.mskzoom.mskstats.mskaddins.mskoptions.mskfind.bmpfind.msk)  1 J>AJc>Ncg>[gh>hhi>qij>zjk>kl>lm>mvn>vnlo>lobp>bp s> s|>|l>l>>t>t$>  $0P>0Pxz>"xz{>.{ H>U>b>k>t>>>> > >t>